Development

Documentation/it_IT/book/1.0/01-Introducing-Symfony

You must first sign up to be able to contribute.

Version 3 (modified by gscaglia, 10 years ago)
--

Capitolo 1 - Introduzione

Cosa può fare symfony per te? Cosa è richiesto per poterlo usare? Il presente capitolo fornirà una risposta a queste domande.

Symfony in breve

Un framework permette di velocizzare lo sviluppo di applicazioni automatizzando alcuni pattern utilizzati per risolvere problemi noti. Un framework inoltre dota il codice di una struttura, che incoraggia lo sviluppatore alla scrittura di codice migliore, più leggibile e più facilmente manutenibile. Infine, un framework facilita la vita dello sviluppatore, in quanto "impacchetta" operazioni complesse all'interno di semplici statement.

symfony è un framework completo, studiato per ottimizzare lo sviluppo di applicazioni web sulla base di diverse caratteristiche chiave. Per i principianti, separa le business rules, server logic, e presentation views dell'applicazione. Contiene molti tool e classi che hanno lo scopo di accorciare il tempo di sviluppo di un'applicazione web molto complicata. Inoltre, automatizza task comuni, in modo che lo sviluppatore si possa concentrare sulle specifiche dell'applicazione. Si potrebbe riassumere il risultato finale come "non è necessario reinventare la ruota ogni volta che una nuova applicazione web deve essere sviluppata!".

symfony è stato scritto interamente in PHP 5. E' stato intensamente testato su progetti reali, ed è attualmente in uso per siti di e-business ad alto traffico. E' compatibile con la maggior parte dei database esistenti, inclusi MySQL, PostgreSQL, Oracle, e Microsoft SQL Server. Gira su piattaforme *nix e Windows. Cominciamo con un'occhiata più da vicino alle sue caratteristiche.

Caratteristiche

Symfony è stato pensato per soddisfare i seguenti requisiti:

  • Facile da installare e configurare sulla maggior parte delle piattaforme (e garanzia di funzionamento su installazioni standard di *nix e Windows)
  • Indipendente dal database sottostante
  • Semplice da usare, nella maggior parte dei casi, ma flessibile abbastanza da adattarsi a problematiche particolarmente complesse
  • Basato sulla premessa di convenzione sulla configurazione -- Lo sviluppatore deve configurare solo ciò che non è convenzionale
  • Adeguato alle pratiche di sviluppo web ed ai pattern più comuni
  • Pronto per l'azienda -- Adattabile a politiche ed architetture IT esistenti, e stabile abbastanza da permettere lo sviluppo di progetti a lungo termine
  • Codice molto leggibile, commentato con phpDocumentor, per una maggiore facilità di manutenzione
  • Facile da estendere, grazie alla possibilità d'integrazione con librerie esterne

Caratteristiche di automazione di progetti web

La maggior parte delle caratteristiche di progetti web sono automatizzate in symfony, come:

  • Il layer di internazionalizzazione incorporato permette la traduzione sia dei dati che delle interfacce, nonche la localizzazione dei contenuti
  • La presentazione utilizza template e layout che possono essere realizzati da designer HTML senza alcuna conoscenza del framework. Gli Helper riducono l'ammontare di codice da scrivere per la presentazione, incapsulando grandi porzioni di codice in semplici chiamate a funzioni
  • Le Form supportano validazione e ripopolamento automatici, e ciò assicura una migliore qualità dei dati nel db ed una migliore fruibilità per l'utente
  • L'escaping dell'output protegge le applicazioni da attacchi tramite dati corrotti
  • La gestione della cache riduce la banda utilizzata ed il carico sul server
  • Le caratteristiche di autenticazione e credenziali facilita la creazione di sezioni ristrette e la gestione della sicurezza
  • Routing e URL intelligenti fanno diventare l'indirizzo della pagina parte parte dell'interfaccia, nonchè facilitano il lavoro dei motori di ricerca
  • Le caratteristiche incorporate di gestione E-Mail ed API permettono all'applicazione web di andare oltre la classica interazione con il browser
  • Le liste sono più user-friendly grazie alla paginazione automatica, l'ordinamento ed i filtri
  • Factories, plug-ins, and mixins forniscono un alto livello di espandibilità
  • Le interazioni Ajax sono facilmente implementabili grazie agli one-line helper che incapsulano effetti JavaScript compatibili con i browser più diffusi

Ambiente di sviluppo e tools

Allo scopo di soddisfare i requisiti delle aziende, che spesso hanno le proprie linee di sviluppo e regole di gestione dei progetti, symfony può essere personalizzato completamente. Fornisce, di default, diversi ambienti di sviluppo ed è pacchettizzato con diversi tool che permettono di automatizzare o più comuni task di ingegneria del software:

  • I tool di generazione del codice sono di grande aiuto per i prototipi e per l'amministrazione di backend one-click
  • Il framework di testing incorporato fornisce il tool perfetto per permettere sviluppo test-driven
  • Il pannello di debug accelera la fase di debugging, fornendo allo sviluppatore tutte le informazioni sulla pagina su cui sta lavorando
  • L'interfaccia a linea di comando facilita il deployment di applicazioni su due server
  • Cambiamenti di configurazione "live" sono possibili e non creano problemi
  • Il sistema di log fornisce all'amministratore uno strumento di analisi completo sul funzionamento dell'applicazione

Chi ha sviluppato symfony, e per quale motivo?

La prima versione di symfony fu rilasciata nell'ottobre del 2005 dal fondatore del progetto e co-autore del presente libro, Fabien Potencier. Egli è CEO di Sensio (http://www.sensio.com/), un'agenzia web francese molto conosciuta per le sue idee innovative e la sua visione sullo sviluppo web.

Nel 2003, Fabien ha speso un pò di tempo cercando informazioni sui framework in PHP di sviluppo web esistenti; nella sua ricerca ha capito che non ne esisteva nemmeno uno che soddisfacesse tutti i requisiti elencati precedentemente. Quando PHP 5 fu rilasciato, egli decise che i tempi erano maturi per avere un framework del genere; per cui passò un anno sviluppando il core di symfony, basando il proprio lavoro sul modello MVC (Model-View-Controller) del framework Mojavi, del progetto di mappatura oggetto-relazioni (ORM) Propel e gli helper per le template di Ruby on Rails.

Fabien scrisse originariamente symfony per alcuni progetti di Sensio, perchè avere un framework effettivamente funzionante a propria disposizione è l'ideale per sviluppare applicazionin più velocemente ed efficientemente. Inoltre rende lo sviluppo web più intuitivo, e le applicazioni che ne scaturiscono risultano più efficienti e facili da manutenere. Il framework dimostrò la sua efficienza quando fu impiegato per lo sviluppo di un sito di commercio elettronico per un rivenditore di intimo, di conseguenza fu utilizzato in seguito per altri progetti.

Dopo averlo usato con successo per diversi progetti, Fabien decise di rilasciarlo sotto una licenza open source. Così decise di donare la sua creatura alla comunità, per beneficiare del riscontro degli utenti, per mostrare l'esperienza di Sensio, e per divertimento.

Note Perchè "symfony" e non "FrameworkDELL'ELETTRONICO"? Perchè Fabien voleva un nome corto, che contenesse una s come in Sensio, ed una f come in "framework" -- facile da ricordare e non associato ad altri strumenti di sviluppo. Inoltre a Fabien non piacciono le lettere maiuscole. symfony era il nome che si avvicinava di più a tali requisiti, anche se in un inglese non totalmente corretto, ed era anche disponibile come nome per un progetto. L'altra alternativa era "baguette".

Per diventare un progetto open source di successo, symfony necessitava di buona documentazione, in inglese, in modo tale da attirare più persone possibile. Così Fabien chiese al collega in Sensio, François Zaninotto, l'altro co-autore di questo libro, di scavare all'interno del codice e scriverne un libro online. Ciò ha richiesto del tempo, ma quando il progetto fu reso di pubblico dominio, era documentato abbastanza bene da richiamare l'attenzione di molti sviluppatori. Il resto è storia.

La comunità di symfony

Appena il sito web di symfony (http://www.symfony-project.com/) fu lanciato, numerosi sviluppatori da tutto il mondo scaricarono ed installarono il framework, lessero la documentazione online e appena finirono la loro prima applicazione la voce cominciò a spargersi.

I framework per applicazioni web stavano diventando popolari a quel tempo, e la necessità di avere un framework in PHP completo era grande. symfony offriva a quel punto una soluzione convincente, sia per l'impressionante qualità del codice, sia per la quantità di documentazione; due grandi vantaggi sugli altri concorrenti nel campo dei framework. Le persone coinvolte cominciarono presto a suggerire miglioramenti, presentare patch e giocare tutti i ruoli importanti nel processo di diffusione.

Il repository dei sorgenti ed il sistema di ticket offrono diversi modi per contribuire, ed ogni volontario è il benvenuto. Fabien continua ad essere il maggior sviluppatore del ramo codice sorgente, e garantisce la qualità del codice.

Oggi il forum, la mailing list ed il canale Internet Relay Chat (IRC) offrono il supporto ideale, dalle statistiche verosimilmente ogni domanda riceve in media quattro risposte. Nuovi arrivati installano symfony ogni giorno, ed il wiki e e la sezione code snippet ospitano molta documentazione creata da utenti della comunità. Il numero di applicazioni create con symfony cresce con una media di cinque alla settimana.

La comunità di symfony è il terzo punto di forza del framework, e noi speriamo che dopo aver letto il presente libro anche tu ti unisca a noi!

Symfony fa per me?

Sia che tu sia un esperto di PHP 5 che un principiante dello sviluppo web, non avrai problemi ad usare symfony. Il fattore principale che determina l'uso o meno di questo framework è la dimensione del progetto da creare.

Se devi sviluppare un semplice sito da cinque a dieci pagine, con un limitato accesso a database, e nessun obbligo di assicurare le performance o fornire documentazione, allora dovresti usare solo PHP. Non ci sarebbe niente da guadagnare ad usare un framework per un sito del genere, e l'utilizzo di tecniche di programmazione orientata agli oggetti o di pattern come MVC non farebbe altro che rallentare il tuo processo di sviluppo. Una nota: symfony non è ottimizzato per girare su un server dove PHP è configurato solo come Common Gateway Interface (CGI).

D'altra parte, se devi sviluppare applicazioni web complesse, con una pesante business logic, PHP da solo non è sufficiente. Se il tuo piano è di avere un'applicazione che in futuro potrà essere estesa, il tuo codice dovrebbe essere leggero, leggibile ed efficace. Se vuoi utilizzare le più recenti tecnologie nel campo dell'interazione con l'utente (come ad esempio Ajax) in modo molto intuitivo, non puoi perdere tempo scrivendo centinaia di linee di codice Javascript. Se ti vuoi divertire e sviluppare velocemente, probabilmente PHP da solo potrebbe essere una delusione. In tutti questi casi, symfony è per te.

E, ovviamente, se sei uno sviluppatore web esperto, conosci già i benefici derivanti dall'utilizzo di un framework, e te ne serve uno maturo e ben documentato, con una grande comunità alle spalle, non devi cercare oltre, symfony è la tua soluzione.

TIP Se sei interessato ad una dimostrazione, dai un'occhiata agli screencast disponibili sul sito. Ti renderai conto di quanto sia veloce e divertente sviluppare applicazioni con symfony.

Concetti fondamentali

Prima di cominciare con symfony, occorre apprendere qualche concetto di base. Sentiti libero di passare oltre se hai già fatto tuoi concetti come OOP, ORM, RAD, DRY, KISS, TDD, YAML, and PEAR.

PHP 5

Symfony è stato sviluppato interamente in PHP 5 ([http://www.php.net]) e dedicato allo sviluppo di applicazioni web con lo stesso linguaggio. Per questo motivo occorre una solida preparazione su PHP 5 per capire i concetti fondamentali del framework.

Gli sviluppatori che già conoscono PHP 4 ma non PHP 5 si dovrebbero concentrare sul nuovo modello object-oriented del linguaggio.

Object-Oriented Programming (OOP)

La programmazione Object-Oriented (OOP) non sarà spiegata in questo capitolo. Ci vorrebbe un libro intero! Dato che symfony fa un uso intenso del meccanismo OOP di PHP 5, questo paradigma è un prerequisito per imparare symfony.

Wikipedia descrive OOP in questa maniera:

L'idea dietro la programmazione orientata agli oggetti è che un programma per computer può essere visto come un insieme di unità, od oggetti, che operano gli uni con gli altri, contrariamente alla visione tradizionale, in cui un programma è un insieme di funzioni, o più semplicemente una lista di istruzioni per il computer.

PHP 5 implementa i paradigmi di classe, oggetto, metodo, ereditarietà e molto altro ancora. Coloro che non hanno familiarità con tali concetti, dovrebbero leggerne la relativa documentazione disponibile su http://www.php.net/manual/en/language.oop5.basic.php.

Metodi magici

Uno dei punti di forza delle caratteristiche OOP di PHP è l'uso di metodi magici. Si tratta di metodi che possono essere usati per fare l'override del comportamento di default delle classi senza doverne modificare il codice. Questi metodi fanno diventare la sintassi di PHP più leggibile e più estendibile. Essi sono facili da riconoscere, perchè il loro nome comincia sempre con due underscore (__).

Ad esempio, qunado si visualizza un oggetto, PHP cerca sempre se esiste un metodo chiamato __toString() per l'oggetto in questione, per controllare se lo sviluppatore ha definito una visualizzazione personalizzata:

[php]
$myObject = new myClass();
echo $myObject;
// Will look for a magic method
echo $myObject->__toString();

Symfony usa i metodi magici, per cui dovresti averne una approfondita conoscenza; sono descritti nella relativa documentazione di PHP (http://www.php.net/manual/en/language.oop5.magic.php).

Estensioni PHP e Application Repository (PEAR)

PEAR è un "framework e sistema di distribuzione per componenti PHP riutilizzabili". PEAR permette di installare, aggiornare e disinstallare script PHP. Quando viene utilizzato un pacchetto PEAR, non ci si deve preoccupare di dove metterlo, come renderlo disponibile all'applicazione, o come estendere l'interfaccia a linea di comando (CLI).

PEAR è un progetto community-driven scritto in PHP e distribuito con PHP.

TIP Il sito web della PEAR, http://pear.php.net/, offre documentnazione e pacchetti organizzati per categorie.

PEAR è il sistema più professionale per installare librerie in PHP. symfony suggerisce caldamente di utilizzare PEAR, in maniera tale da avere un punto centrale di installazione sul quale creare diversi progetti. Il plug-ins di symfony sono pacchetti PEAR dotati di particolari configurazioni. Lo stesso symfony framework è disponibile come pacchetto PEAR.

Non c'è bisogno di essere esperti di PEAR per poter utilizzare symfony; è necessario solamente capire che cosa fa ed averla installata. Puoi controllare di averla sul tuo sistema semplicemente digitando i seguenti comandi sulla CLI:

> pear info pear

Questo comando mostrerà la versione di PEAR installata nel sistema.

Il progetto symfony ha un proprio repository PEAR, o channel. Da notare che i channel sono disponibili dalla versione 1.4.0 di PEAR in avanti, per cui se hai una versione più vecchia devi prima aggiornarla e poi installare symfony. Per aggiornare PEAR basta fare:

> pear upgrade PEAR

Object-Relational Mapping (ORM)

I database sono relazionali. PHP 5 e symfony sono orientati agli oggetti. Per poter accedere ad un database in un modo orientato agli oggetti, occorre disporre di un'interfaccia che traduca l'oggetto logico in relazionale. Questa interfaccia è chiamata Object-Relational Mapping od ORM.

Un ORM è fatto di oggetti che forniscono accesso ai dati e che mantengono al proprio interno le business rule.

Uno dei benefici derivanti dlal'utilizzare un livello di astrazione oggetto/relazione è che permette allo sviluppatore di evitare di usare una sintassi specifica per un dato db. Questo strato si occupa di tradurre automaticamente le chiamate al modello oggetto in query SQL ottimizzate per il database sottostante.

Questo implica la facilità con cui si può cambiare database a metà di un progetto. Immagina di dover scrivere rapidamente un prototipo di un'applicazione quando il cliente ancora non ha deciso quale sia il database più adatto allo scopo. Puoi cominciare a scrivere l'applicazione son SQLite, ad esempio, e cambiare in seguito con MySQL, PostgreSQL, od Oracle quando il cliente ha deciso cosa utilizzare. C'è semplicemente da cambiare una linea in un file di configurazione, e tutto continua a funzionare perfettamente.

Un layer di astrazione incapsula la data logic. Il resto dell'applicazione non ha bisogno di sapere nulla a proposito di query SQL, ed il codice SQL che accede il database è facile da individuare. Gli sviluppatori specializzati in programmazione di database sanno chiaramente dove cercare.

C'è un altro beneficio che proviene dall'utilizzare oggetti al posto di record e classi al posto di tabelle: si possono aggiungere elementi per poter accedere alle tabelle. Ad esempio, se tu avessi una tabella chiamata Client con due campi, FirstName e LastName, potrebbe essere utile poter accedere semplicemente a Name. In un mondo orientato agli oggetti, questo scopo è facilmente raggiungibile semplicemente aggiungendo un metodo alla classe Client in questo modo:

[php]
public function getName()
{
  return $this->getFirstName().' '.$this->getLastName();
}

Tutte quelle funzioni ripetitive, e la business logic dei dati possono essere manutenute con oggetti del genere. A titolo di esempio, consideriamo una classe ShoppingCart nella quale vengono tenuti prodotti (oggetti). Per sapere il prezzo totale del carrello in un dato momento, per poter pagare, basterebbe scrivere un metodo getTotal() in questo modo:

[php]
public function getTotal()
{
  $total = 0;
  foreach ($this->getItems() as $item)
  {
    $total += $item->getPrice() * $item->getQuantity();
  }
  return $total;
}

E questo è quanto. Immagina quanto tempo ci vorrebbe per scrivere una query SQL che faccia la stessa cosa.

Uno dei migliori layer di astrazione oggetto/relazione per PHP 5 è Propel, un altro progetto open source. symfony integra Propel trasparentemente al proprio interno, quindi la maggior parte delle operazioni di trattamento dei dati descritte nel presente libro seguono la sua sintassi. Questo libro descriverà come usare gli oggetti Propel, ma per una lettura più approfondita è raccomandata una visita al sito (http://propel.phpdb.org/trac/).

Rapid Application Development (RAD)

Sviluppare applicazioni web è stato per un lungo tempo un lavoro noioso e lento. Seguendo i cicli di vita consueti di ingegneria del software (come quello proposto dal Rational Unified Process, per esempio) lo sviluppo di una applicazione non poteva cominciare prima che fosse raccolto un insieme completo di requisiti, che fossero disegnati una quantità di diagrammi UML (Unified Modeling Language) e che fosse scritta una tonnellata di documentazione. Questo era dovuto alla velocità di sviluppo, alla carenza di versatilità dei linguaggi di programmazione (si doveva scrivere, compilare, riavviare e chissà cos'altro prima di poter vedere un programma girare) e, soprattutto, al fatto che i clienti erano abbastanza ragionevoli e non cambiavano idea ogni 5 minuti.

Oggi gli affari si muovono veloci, e i clienti tendono a cambiare idea frequentemente durante lo sviluppo di un progetto. Inoltre si aspettano che il team di sviluppo reagisca velocemente ai cambiamenti, e modifichi la struttura dell'applicazione rapidamente. Fortunatamente, linguaggi di script come PERL e PHP si prestano molto bene a ad applicare differenti strategie di programmazione, come ad esempio la Rapid Application Development (RAD) o la Agile Software Development.

Una delle idee alla base di queste metodologie è quella di cominciare a sviluppare il prima possibile, in modo tale che il cliente possa revisionare un prototipo ed offrire direzioni di sviluppo alternative. Quindi l'applicazione cresce seguendo un processo iterativo, rilasciando versioni sempre più ricche di caratteristiche in cicli di sviluppo brevi.

Le conseguenze per uno sviluppatore sono molteplici. Uno sviluppatore non ha bisogno di pensare al futuro mentre sta implementando una parte; il metodo usato dovrebbe essere il più semplice e diretto possibile. Questo concetto è illustrato bene dal massimo dei principi KISS: Keep it Simple, Stupid.

Quando i requisiti evolvono o viene aggiunta una caratteristica, il codice esistente normalmente deve essere in parte riscritto. Questo processo prende il nome di refactoring, e succede spesso nel corso dello sviluppo di un'applicazione web. Il codice viene spostato da una parte all'altra, seguendo il proprio percorso naturale. Porzioni di codice duplicate vengono "refactored" in un'unica posizione, applicando in questo modo il principio del non ripetersi (DRY, Don't Repeat Yourself).

E per accertarsi del corretto funzionamento dell'applicazione quando cambia costantemente, c'è bisogno di un insieme di unità di test che possano essere automatizzati. Se scritti nel modo giusto, le unità di test sono un solido strumento per assicurarsi che niente sia stato rovinato da refactoring di codice. Alcune metodologie di sviluppo addirittura si basano sulla scrittura di test prima di iniziare a scrivere del codice; prendono il nome di test-driven development (TDD).

NOTE Ci sono altri princìpi e diverse buone abitudini che riguardano lo sviluppo agile. Una delle più efficaci metodologie di sviluppo agile è chiamata Extreme Programming (XP) e la propria letteratura insegna molto a proposito dello sviluppo veloce ed efficace. Un buon punto di partenza è la serie di libri su XP di Kent Beck (Addison-Wesley).

Symfony è uno strumento perfetto per il RAD, infatti il framework è stato sviluppato da un'agenzia che utilizza il principio del RAD per i propri progetti. Ciò significa che imparare ad usare symfony non implica imparare un nuovo linguaggio, piuttosto come applicare le giuste azioni e prendere le giuste decisioni per sviluppare in modo più efficace.

Il sito di symfony propone un tutorial passo passo che illustra lo sviluppo agile di un'applicazione. E' chiamato askeet (http://www.symfony-project.com/askeet), ed è una lettura raccomandata per tutti coloro che sono interessati a capire qualcosa di più riguardo lo sviluppo agile.

YAML

Come definito sul sito ufficiale(http://www.yaml.org/), , YAML è "una macchina per il parsing diretto di dati in formato seriale leggibile dall'uomo e per l'interazione con linguaggi di script". In altre parole, si tratta di un linguaggio molto semplice usato per descrivere i dati in un formato simile ad XML ma con una sintassi notevolmente più semplice. E' specialmente utile quando si devono descrivere dati che possono essere rappresentati come array o hash, come ad esempio i seguenti:

[php]
$house = array(
  'family' => array(
    'name'     => 'Doe',
    'parents'  => array('John', 'Jane'),
    'children' => array('Paul', 'Mark', 'Simone')
  ),
  'address' => array(
    'number'   => 34,
    'street'   => 'Main Street',
    'city'     => 'Nowheretown',
    'zipcode'  => '12345'
  )
);

Questo array in PHP può essere creato automaticamente facendo il parsing del seguente file YAML:

house:
  family:
    name:     Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

In YAML la struttura è rappresentata tramite indentazione, sequenze di elementi sono denotate da un cancelletto, e le coppie chiave/valore all'interno di una mappatura sono delimitate dal simbolo dei due punti. YAML possiede anche una sintassi abbreviata per descrivere la stessa struttura con meno linee, dove gli array sono visualizzati esplicitamente con [] e gli hash con {}. Così, la sintassi mostrata precedentemente può essere riscritta così:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

YAML è un acronimo di Yet Another Markup Language e si pronuncia "yamel". Il formato è in giro dal 2001, e parser YAML esistono per una grande varietà di linguaggi.

TIP Le specifiche del formato YAML sono reperibili su http://www.yaml.org/.

Come si può notare, scrivere YAML è più veloce di scrivere XML (non ci sono tag di chiusura o virgolette esplicite), ed è più potente di file .ini (che non supportano gerarchie). Questi sono i motivi per i quali symfony usa YAML come linguaggio preferito per memorizzare configurazioni. In questo libro vedrai molti file scritti in YAML, ma si tratta di un formato talmente diretto che probabilmente non avrai bisogno di impararne di più.

Riepilogo

Symfony è un framework per applicazioni web basato su PHP 5, che fornisce gli strumenti necessari a velocizzare lo sviluppo di applicazioni complesse. Questo libro ti spiegherà tutto, l'unica cosa di cui hai bisogno per capire è la familiarità con i concetti di base della programmazione moderna, ovver programmazione ad oggetti (OOP), mappatura oggetti/relazioni (ORM), e sviluppo rapido di applicazioni (RAD). L'unico requisito tecnico è la conoscenza di PHP 5.