Development

Documentation/it_IT/book/1.1/01-Introducing-Symfony (diff)

You must first sign up to be able to contribute.

Changes from Version 1 of Documentation/it_IT/book/1.1/01-Introducing-Symfony

Show
Ignore:
Author:
garak (IP: 62.101.100.5)
Timestamp:
10/09/08 15:08:35 (9 years ago)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/it_IT/book/1.1/01-Introducing-Symfony

    v0 v1  
     1{{{ 
     2#!WikiMarkdown  
     3 
     4Capitolo 1 - Introduzione 
     5========================= 
     6 
     7Cosa può fare symfony per te? Cosa è richiesto per poterlo usare? Il presente capitolo fornirà una risposta a queste domande. 
     8 
     9Symfony in breve 
     10---------------- 
     11 
     12Un 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. 
     13 
     14symfony è 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!". 
     15 
     16symfony è 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. 
     17 
     18### Caratteristiche 
     19 
     20Symfony è stato pensato per soddisfare i seguenti requisiti: 
     21 
     22  * Facile da installare e configurare sulla maggior parte delle piattaforme (e garanzia di funzionamento su installazioni standard di *nix e Windows) 
     23  * Indipendente dal database sottostante 
     24  * Semplice da usare, nella maggior parte dei casi, ma flessibile abbastanza da adattarsi a problematiche particolarmente complesse 
     25  * Basato sulla premessa di convenzione sulla configurazione -- Lo sviluppatore deve configurare solo ciò che non è convenzionale 
     26  * Adeguato alle pratiche di sviluppo web ed ai pattern più comuni 
     27  * Pronto per l'azienda -- Adattabile a politiche ed architetture IT esistenti, e stabile abbastanza da permettere lo sviluppo di progetti a lungo termine 
     28  * Codice molto leggibile, commentato con phpDocumentor, per una maggiore facilità di manutenzione 
     29  * Facile da estendere, grazie alla possibilità d'integrazione con librerie esterne 
     30 
     31#### Caratteristiche di automazione di progetti web 
     32 
     33La maggior parte delle caratteristiche di progetti web sono automatizzate in symfony, come: 
     34 
     35  * Il layer di internazionalizzazione incorporato permette la traduzione sia dei dati che delle interfacce, nonche la localizzazione dei contenuti 
     36  * 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 
     37  * Le Form supportano validazione e ripopolamento automatici, e ciò assicura una migliore qualità dei dati nel db ed una migliore fruibilità per l'utente 
     38  * L'escaping dell'output protegge le applicazioni da attacchi tramite dati corrotti 
     39  * La gestione della cache riduce la banda utilizzata ed il carico sul server 
     40  * Le caratteristiche di autenticazione e credenziali facilita la creazione di sezioni ristrette e la gestione della sicurezza 
     41  * Routing e URL intelligenti fanno diventare l'indirizzo della pagina parte parte dell'interfaccia, nonchè facilitano il lavoro dei motori di ricerca 
     42  * Le caratteristiche incorporate di gestione E-Mail ed API permettono all'applicazione web di andare oltre la classica interazione con il browser 
     43  * Le liste sono più user-friendly grazie alla paginazione automatica, l'ordinamento ed i filtri 
     44  * Factories, plug-ins, and mixins forniscono un alto livello di espandibilità 
     45  * Le interazioni Ajax sono facilmente implementabili grazie agli one-line helper che incapsulano effetti JavaScript compatibili con i browser più diffusi 
     46 
     47#### Ambiente di sviluppo e tools 
     48 
     49Allo 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: 
     50 
     51 * I tool di generazione del codice sono di grande aiuto per i prototipi e per l'amministrazione di backend one-click 
     52 * Il framework di testing incorporato fornisce il tool perfetto per permettere sviluppo test-driven 
     53 * Il pannello di debug accelera la fase di debugging, fornendo allo sviluppatore tutte le informazioni sulla pagina su cui sta lavorando 
     54 * L'interfaccia a linea di comando facilita il deployment di applicazioni su due server 
     55 * Cambiamenti di configurazione "live" sono possibili e non creano problemi 
     56 * Il sistema di log fornisce all'amministratore uno strumento di analisi completo sul funzionamento dell'applicazione 
     57 
     58### Chi ha sviluppato symfony, e per quale motivo? 
     59 
     60La 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/](http://www.sensio.com/)), un'agenzia web francese molto conosciuta per le sue idee innovative e la sua visione sullo sviluppo web. 
     61 
     62Nel 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. 
     63 
     64Fabien 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. 
     65 
     66Dopo 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. 
     67 
     68>**Note** 
     69>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". 
     70 
     71Per 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. 
     72 
     73### La comunità di symfony 
     74 
     75Appena il sito web di symfony ([http://www.symfony-project.com/](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. 
     76 
     77I 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. 
     78 
     79Il 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. 
     80 
     81Oggi 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. 
     82 
     83La 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! 
     84 
     85### Symfony fa per me? 
     86 
     87Sia 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. 
     88 
     89Se 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). 
     90 
     91D'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. 
     92 
     93E, 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. 
     94 
     95>**TIP** 
     96>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. 
     97 
     98Concetti fondamentali 
     99--------------------- 
     100 
     101Prima 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. 
     102 
     103### PHP 5 
     104 
     105Symfony è 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. La versione minima di PHP richiesta per far girare symfony è PHP 5.1. 
     106 
     107Gli sviluppatori che già conoscono PHP 4 ma non PHP 5 si dovrebbero concentrare sul nuovo modello object-oriented del linguaggio. 
     108 
     109### Object-Oriented Programming (OOP) 
     110 
     111La 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. 
     112 
     113Wikipedia descrive OOP in questa maniera: 
     114 
     115L'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. 
     116 
     117PHP 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/it/language.oop5.basic.php](http://www.php.net/manual/it/language.oop5.basic.php). 
     118 
     119### Metodi magici 
     120 
     121Uno 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 (`__`). 
     122 
     123Ad 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: 
     124 
     125    [php] 
     126    $myObject = new myClass(); 
     127    echo $myObject; 
     128    // Will look for a magic method 
     129    echo $myObject->__toString(); 
     130 
     131Symfony usa i metodi magici, per cui dovresti averne una approfondita conoscenza; sono descritti nella relativa documentazione di PHP ([http://www.php.net/manual/it/language.oop5.magic.php](http://www.php.net/manual/it/language.oop5.magic.php)). 
     132 
     133### Estensioni PHP e Application Repository (PEAR) 
     134 
     135PEAR è 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). 
     136 
     137PEAR è un progetto community-driven scritto in PHP e distribuito con PHP. 
     138 
     139>**TIP** 
     140>Il sito web della PEAR, [http://pear.php.net/](http://pear.php.net/), offre documentnazione e pacchetti organizzati per categorie. 
     141 
     142PEAR è 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. 
     143 
     144Non 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: 
     145 
     146    > pear info pear 
     147 
     148Questo comando mostrerà la versione di PEAR installata nel sistema. 
     149 
     150Il 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: 
     151 
     152    > pear upgrade PEAR 
     153 
     154### Object-Relational Mapping (ORM) 
     155 
     156I 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. 
     157 
     158Un ORM è fatto di oggetti che forniscono accesso ai dati e che mantengono al proprio interno le business rule. 
     159 
     160Uno 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. 
     161 
     162Questo 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. 
     163 
     164Un 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. 
     165 
     166C'è 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: 
     167 
     168    [php] 
     169    public function getName() 
     170    { 
     171      return $this->getFirstName().' '.$this->getLastName(); 
     172    } 
     173 
     174Tutte 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: 
     175 
     176    [php] 
     177    public function getTotal() 
     178    { 
     179      $total = 0; 
     180      foreach ($this->getItems() as $item) 
     181      { 
     182        $total += $item->getPrice() * $item->getQuantity(); 
     183      } 
     184      return $total; 
     185    } 
     186 
     187E questo è quanto. Immagina quanto tempo ci vorrebbe per scrivere una query SQL che faccia la stessa cosa. 
     188 
     189Uno dei migliori layer di astrazione oggetto/relazione per PHP 5 è Propel, un altro progetto open source. symfony integra Propel trasparentemente come ORM prefedinito, 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/](http://propel.phpdb.org/trac/)). 
     190A partire da symfony 1.1, Propel è distribuito con symfony come plugin, quindi è molto facile passare ad un altro ORM. Di fatto, se si vuole usare Doctrine come ORM, è sufficiente installare sfDoctrinePlugin. 
     191 
     192### Rapid Application Development (RAD) 
     193 
     194Sviluppare 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. 
     195 
     196Oggi 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. 
     197 
     198Una 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. 
     199 
     200Le 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. 
     201 
     202Quando 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). 
     203 
     204E 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). 
     205 
     206>**NOTE** 
     207>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). 
     208 
     209Symfony è 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. 
     210 
     211### YAML 
     212 
     213Come definito sul sito ufficiale([http://www.yaml.org/](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: 
     214 
     215    [php] 
     216    $house = array( 
     217      'family' => array( 
     218        'name'     => 'Doe', 
     219        'parents'  => array('John', 'Jane'), 
     220        'children' => array('Paul', 'Mark', 'Simone') 
     221      ), 
     222      'address' => array( 
     223        'number'   => 34, 
     224        'street'   => 'Main Street', 
     225        'city'     => 'Nowheretown', 
     226        'zipcode'  => '12345' 
     227      ) 
     228    ); 
     229 
     230Questo array in PHP può essere creato automaticamente facendo il parsing del seguente file YAML: 
     231 
     232    house: 
     233      family: 
     234        name:     Doe 
     235        parents: 
     236          - John 
     237          - Jane 
     238        children: 
     239          - Paul 
     240          - Mark 
     241          - Simone 
     242      address: 
     243        number: 34 
     244        street: Main Street 
     245        city: Nowheretown 
     246        zipcode: 12345 
     247 
     248In 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ì: 
     249 
     250    house: 
     251      family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] } 
     252      address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 } 
     253 
     254YAML è 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. 
     255 
     256>**TIP** 
     257>Le specifiche del formato YAML sono reperibili su [http://www.yaml.org/](http://www.yaml.org/). 
     258 
     259Come 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ù. 
     260 
     261Riepilogo 
     262--------- 
     263 
     264Symfony è 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. 
     265 
     266}}}