Development

Documentation/it_IT/book/1.0/03-Running-Symfony

You must first sign up to be able to contribute.

Version 5 (modified by garak, 9 years ago)
corretta path immagine

Capitolo 3 - Installare symfony

Come hai potuto imparare nei capitoli precedenti, il framework symfony è un set di files scritti in PHP. Un progetto realizzato con symfony usa questi files, quindi installare symfony significa prendere questi files e renderli disponibili per il progetto.

Essendo un framework scritto in PHP 5, symfony richiede PHP 5. Controlla d'aver installato la versione corretta di PHP aprendo una shell e digitando il seguente comando:

> php -v

PHP 5.2.0 (cli) (built: Nov 2 2006 11:57:36)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies

Se la versione di PHP è la 5.0 o superiore, allora sei pronto per l'installazione di symfony, descritta in questo capitolo.

Installare il Sandbox

Se vuoi soltanto valutare le potenzialità di symfony, probabilmente sei alla ricerca di un'installazione rapida. In questo caso hai bisogno del sandbox.

Sandbox non è altro che un semplice archivio di files. L'archivio contiene un progetto symfony vuoto che include tutte le librerie richieste (symfony, pake, lime, Creole, Propel e Phing), un'applicazione di default e la configurazione base. Funziona così com'è senza una configurazione specifica del server e non richiede altri pacchetti aggiuntivi.

Per installarlo, scarica l'archivio sandbox dall'indirizzo http://www.symfony-project.com/get/sf_sandbox.tgz. Scompatta l'archivio sotto la root web directory del tuo spazio web (solitamente web/ o www/). A titolo di uniformità, questo capitolo presuppone che tu abbia scompattato l'archvio nella directory sf_sandbox/.

CAUTION Mantenere tutti i files sotto la root è utile solo per i nostri tests in locale, ma è una scelta sbagliata per i server di produzione: in questo modo gli utenti finali possono visualizzare tutta la struttura dell'applicazione.

Esegui il test della tua installazione utilizzando symfony CLI. Su sistemi *nix apri una shell, accedi alla nuova directory sf_sandbox/ e digita questo comando:

> ./symfony -V

Su sistema Windows utilizza questo comando:

> symfony -V

Dovresti ottenere la versione del sandbox:

symfony version 1.0.0

Adesso controlla che il tuo web server possa utilizzare il sandbox digitando questa URL:

http://localhost/sf_sandbox/web/frontend_dev.php/

Dovresti vedere una pagina di congratulazioni come quella della Figura 3-1: questo significa che la tua installazione è finita. In caso contrario, un messaggio d'errore di guiderà attraverso le modifiche di configurazione richieste. Puoi anche consultare la sezione "Troubleshooting" di questo capitolo.

Figura 3-1 - Pagina di congratulazioni del Sandbox

Pagina di congratulazioni del Sandbox

Il Sandbox è pensato per permetterti di fare pratica con symfony sul tuo computer locale e non per sviluppare complesse applicazioni che verranno pubblicate sul web. Comunque, la versione di symfony utilizzata per la creazione del sandbox è pienamente funzionale ed equivalente a quella installabile via PEAR.

Per disinstallare il sandbox basta rimuovere la directory sf_sandbox/ directory dalla tua web/ root.

Installare le librerie di symfony

Nelle fasi di sviluppo di un'applicazione, probabilmente avrai bisogno di una doppia installazione di symfony: una per il tuo ambiente di sviluppo ed una per il tuo host server (a meno che il tuo host non abbia già symfony installato). Sviluppando una o più applicazioni, onde evitare duplicati, probabilmente vorrai mantenere tutti i files di symfony in un posto unico. Questo per ogni server utilizzato.

Dato che il framework symfony si evolve rapidamente, una nuova versione stabile potrebbe essere rilasciata pochi giorni dopo la tua prima installazione. L'aggiornamento del framework deve essere la tua maggior preoccupazione ed anche per questo conviene avere una sola installazione delle librerie da condividere con tutti i tuoi progetti.

Al momento dell'installazione delle librerie per il tuo ambiente di lavoro, hai due alternative:

* L'installazione via PEAR è raccomandata alla maggior parte degli utenti. E' di facile condivisione ed aggiornamento, mentre l'installazione è un processo veloce e diretto.
* L'installazione via Subversion (SVN) è consigliata solo agli sviluppatori PHP avanzati, che vogliono trarre profitto dalle ultime patches, aggiungere proprie features, e/o contribuire al progetto symfony.

Symfony integra anche altri pacchetti:

  • pake è una CLI utility.
  • lime è una unit test utility.
  • Creole è un database abstraction engine. Così come PHP Data Objects (PDO), esso agisce da interfaccia tra il tuo codice ed il codice SQL del tuo database, garantendo la possibilità di passare ad un altro 'motore'.
  • Propel è utilizzato come ORM e fornisce l'object persistence ed il query service.
  • Phing è una CLI per Propel.

Pake e lime sono sviluppati dal team di symfony. Creole, Propel e Phing sono sviluppato da altri team e sono rilasciati sotto la GNU Lesser Public General License (LGPL). Tutti questi pacchetti sono forniti con symfony.

Installare il pacchetto PEAR di symfony

La versione PEAR di symfony contiene le librerie e tutte le loro dipendenze. Inoltre contiene uno script che estende la tua CLI includendo il comando symfony.

Il primo passo per installare questa versione è quello di aggiungere il canale symfony a PEAR, utilizzando questo comando:

> pear channel-discover pear.symfony-project.com

Per scoprire le librerie disponibili in questo canale, digita:

> pear remote-list -c symfony

so sei pronto per installare l'ultima versione stabile di symfony. Utilizza questo comando:

> pear install symfony/symfony

downloading symfony-1.0.0.tgz ...
Starting to download symfony-1.0.0.tgz (1,283,270 bytes)
.................................................................
.................................................................
.............done: 1,283,270 bytes
install ok: channel://pear.symfony-project.com/symfony-1.0.0

Quest è tutto. I file necessari e la CLI sono installati. Controlla che l'installazione sia avvenuta con successo tramite il nuovo comando symfony, richiedendo la versione:

> symfony -V

symfony version 1.0.0

TIP Se invece preferisci installare l'ultima versione beta, con gli ultimi bug fixes e miglioramenti, digita pear install symfony/symfony-beta. Le beta releases non sono completamente stabili e non sono consigliate per gli ambienti di produzione.

Ora le librerie symfony sono installate nel seguente modo:

  • $php_dir/symfony/ contiene le librerie principali.
  • $data_dir/symfony/ contiene lo scheletro le applicazioni symfony; i moduli di default; la configurazione, i18n files, e così via.
  • $doc_dir/symfony/ contiene la documentazione.
  • $test_dir/symfony/ contiene le unità di test.

La variabili _dir fanno parte della tua configurazione di PEAR. Per conoscere il loro valore digita:

> pear config-show

Installare symfony utilizzando SVN

Per i server di produzione o quando impossibilitati ad usare PEAR puoi scaricare le ultime librerie direttamente dal symfony Subversion repository tramite un checkout:

> mkdir /path/to/symfony
> cd /path/to/symfony
> svn checkout http://svn.symfony-project.com/tags/RELEASE_1_0_0/ .

Il comando symfony, disponibile solo per l'installazione via PEAR, non è altro che una chiamata allo script /path/to/symfony/data/bin/symfony. Quindi il codice seguente, utilizzabile con l'installazine SVN, è l'equivalente del comando symfony -V:

> php /path/to/symfony/data/bin/symfony -V

symfony version 1.0.0

Se secgli l'installazione tramite SVN, probabilmente avrai già creato un progetto symfony. Per permettere a questo progetto di utilizzare i files corretti, devi cambiare due variabili definite nel file config/config.php file, come segue:

[php]
<?php

$sf_symfony_lib_dir  = '/path/to/symfony/lib/';
$sf_symfony_data_dir = '/path/to/symfony/data/';

Il capitolo 19 propone altri sistemi per collegare un progetto all'installazione symfony (inclusi i links simbolici e i percorsi relativi).

TIP In alternativa puoi scaricare il pacchetto PEAR (http://pear.symfony-project.com/get/symfony-1.0.0.tgz) e scompattarlo in una directory a piacere. Otterrai lo stesso risultato di un checkout.

Inizializzare un'applicazione

As you learned in Chapter 2, symfony gathers related applications in projects. All the applications of a project share the same databases. In order to set up an application, you must first set up a project.

Creating the Project

Come appreso nel Capitolo 2, symfony riunisce applicazioni collegate in progetti. Tutte le applicazioni di un progetto utilizzano gli stessi databases. Per inizializzare un'applicazione prima di tutto devi inizializzare un progetto.

Per l'installazione via PEAR utilizza questi comandi:

> mkdir ~/myproject
> cd ~/myproject
> symfony init-project myproject

Per l'installazione via SVN, crea un progetto create un progetto tramite questi comandi:

> mkdir ~/myproject
> cd ~/myproject
> php /path/to/symfony/data/bin/symfony init-project myproject

Il comando symfony deve sempre essere richiamato dalla root directory del progetto (myproject/ nei precedenti esempi), questo perchè tutti i possibili tasks sono specifici per progetto.

Symfony creerà una struttura directory come questa:

apps/
batch/
cache/
config/
data/
doc/
lib/
log/
plugins/
test/
web/

TIP Il task init-project aggiunge lo script symfony nella root directory del progetto. Questo script PHP offre le stesse funzionalità del comando symfony installato via PEAR, quindi puoi utilizzare php symfony anzichè symfony nel caso tu non abbia un supporto nativo per la command-line (per le installazioni via SVN).

Creare un'applicazione

Il progetto non è ancora pronto per essere plubblicato, questo perchè è richiesta almeno un'applicazione al suo interno. Per inizializzarla, puoi utilizzare il comando symfony init-app command e passare il nome della tua applicazione come argomento:

> symfony init-app myapp

Questo creerà la directory myapp/ nella cartella apps/ sotto la root del progetto, con le opzioni di configurazione di default ed un set di directories pronte ad ospitare i files del tuo sito:

apps/
  myapp/
    config/
    i18n/
    lib/
    modules/
    templates/

Alcuni file PHP corrispondenti ai front controllers di ogni ambiente di default saranno creati nella directory web del tuo progetto:

web/
  index.php
  myapp_dev.php

index.php è il front controller dell'ambiente di produzione della nuova applicazione. Dato che hai creato la prima applicazione del tuo progetto, symfony ha creato un file chiamato index.php invece che myapp.php (se adesso provi ad aggiungere una nuova applicazione chiamata mynewapp, il nuovo front controller dell'ambiente di produzione sarà chiamato mynewapp.php). Per utilizzare la tua applicazione nell'ambiente di sviluppo, richiama il front controller myapp_dev.php. Imparerai altre cose riguardo gli ambienti nel Capitolo 5.

Configurare il Server Web

Tutti gli scripts nella directory web/ sono i punti d'ingresso dell'applicazione. Per renderli accessebili da Internet è necessario configurare il server web. Nel tuo server di sviluppo, così come per i servizi di hosting professionali, avrai accesso alla configurazione di Apache per configurare un virtual host. Per i piani in shared-host probabilmente avrai accesso solo al file .htaccess.

Configurare un Virtual Host

Il Listato 3-1 è un esempio di una configutazione Apache, in cui un nuovo virtual host è stato aggiunto nel file httpd.conf.

Listato 3-1 - Esempio configurazione Apache, dal file apache/conf/httpd.conf

<VirtualHost *:80>
  ServerName myapp.example.com
  DocumentRoot "/home/steve/myproject/web"
  DirectoryIndex index.php
  Alias /sf /$sf_symfony_data_dir/web/sf
  <Directory "/$sf_symfony_data_dir/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
  <Directory "/home/steve/myproject/web">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

Nella configurazione del Listato 3-1, il percorso placeholder $sf_symfony_data_dir deve essere sostituito con il percorso dell'installazione attuale. Per esempio, per l'installazione via PEAR su sistemi *nix, devi digitare qualcosa come:

    Alias /sf /usr/local/lib/php/data/symfony/web/sf

NOTE L'alias alla directory web/sf/ non è obbligatorio. Questo permette ad Apache di trovare le immagini, i fogli di stile, i files Javascript per la web debug toolbar, l'admin generator, le pagine di default di symfony ed il supporto per Ajax. Un'alternativa a questo alias potrebbe essere quella di creare un link symbolico (symlink) o copiare la directory /path/to/symfony/data/web/sf/ nella directory myproject/web/sf/.

Esegui il restart di Apache ed il gioco è fatto. Richiama la tua nuova applicazione tramite un web browser standard alla seguente URL:

http://localhost/myapp_dev.php/

Dovresti vedere una pagina di congratulazioni simile a quella illustrata precedentemente nella Figura 3-1.

SIDEBAR URL Rewriting

Symfony utilizza l'URL Rewriting per utilizzare gli "smart URLs" per rendere inficizzabili gli URL dai motori di ricerca e nascondendo tutte le informazioni tecniche all'utente. Avrai più informazioni su questa feature, chiamata routing, nel Capitolo 9.

Se la tua versione di Apache non è stata compilato con il modulo mod_rewrite, controlla d'avere il mod_rewrite Dynamic Shared Object (DSO) installato ed il seguente codice nel tuo httpd.conf:

AddModule mod_rewrite.c LoadModule rewrite_module modules/mod_rewrite.so

Se utilizzi IIS (Internet Information Services), hai bisogno che il modulo isapi/rewrite sia installato ed attivo. Controlla la documentazione online di symfony per la guida dettagliata dell'installazione su IIS.

Configurazione su servizi di hosting condiviso

L'installazione con un piano di hosting condiviso è un po' più difficoltosa, in quanto l'host ha un preciso layout delle directories che tu non puoi cambiare.

CAUTION Effettuare lo svilippo ed i tests della tua applicazione direttamente sul tuo spazio in hosting non è consigliato. Una ragione è che in questo modo dai piea visibilità della tua applicazione anche se non è ancora finita, rivelando così il suo ''cuore'' ed essendo soggetto a gravi falle di sicurezza. Un'altra ragione è che le performance dei servizi di hosting spesso non sono sufficienti a far girare con efficienza l'applicazione con i relativi tools di debug. Per questo ti consigliamo di non partire con lo sviluppo direttamente sul tuo spazio in hosting, piuttosto di sviluppare la tua applicazione localmente e, una volta terminata, pubblicarla sull'host. Nel Capitolo 16 verranno trattate le tecniche ed i tools di pubblicazione.

Ora immaginiamo che il tuo servizio di hosting richieda che la cartella web si chiami www/ e non web/, e che tu non abbia i permessi per modificare il file httpd.conf, ma soltanto il file .htaccess della tua cartella web.

In un progetto symfony ogni percorso è configurabile. Il Capitolo 19 parlerà in maniera più approfondita di questa possibilità, nel frattempo puoi rinominare la cartella web in www modificando successivamente la configurazione della tua applicazione come mostrato nel Listato 3-2. Queste linee di codice vanno aggiunte alla fine del file config.php della tua applicazione.

Listato 3-2 - Cambiare la struttura di default delle directory, nel file apps/myapp/config/config.php

[php]
$sf_root_dir = sfConfig::get('sf_root_dir');
sfConfig::add(array(
  'sf_web_dir_name' => $sf_web_dir_name = 'www',
  'sf_web_dir'      => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name,
  'sf_upload_dir'   => $sf_root_dir.DIRECTORY_SEPARATOR.$sf_web_dir_name.DIRECTORY_SEPARATOR.sfConfig::get('sf_upload_dir_name'),
));

La root del tuo progetto contiene per default un file .htaccess, mostrato nel Listato 3-3. Modificalo con i parametri del tuo servizio di hosting.

Listato 3-3 - Default .htaccess, ora in myproject/www/.htaccess

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

  # we skip all files with .something
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony applicationfailed to start properly"

Adesso tutto è pronto e puoi utilizzare la tua applicazione. Richiama la pagina di congratulazioni richiamando questa URL:

http://www.example.com/myapp_dev.php/

SIDEBAR Altre configurazioni server

Symfony è compatibile anche con altre configurazioni. Per esempio, puoi accedere alle applicazioni symfony utilizzando degli alias anzichè i virtual host. Puoi anche utilizzare symfony su IIS. Ci sono tante tecniche quante sono le configurazioni, e non è scopo di questo libro illustrarle tutte.

Se ricerchi una configurazione server specifica, fai riferimento al wiki di symfony (http://www.symfony-project.com/trac/wiki), che contiene molti tutorial passo-a-passo.

Troubleshooting

Se incontri problemi durante la fase di installazione, fai tesoro delle segnalazioni riportate dalla shell o dal browser. Questo errori sono spesso auto-esplicativi e possono contenere links a specifiche risorse del Web che trattano il problema.

Problemi tipici

Se continui ad avere problemi nell'installare symfony, controlla che:

  • Alcune installazioni PHP abilitano entrambi i comandi di PHP4 e PHP5. In questi casi, il comandi da lanciare per utilizzare la CLI e php5 e non php. Inoltre potresti aver bisogno di aggiungere SetEnv PHP_VER 5 al tuo file .htaccess, o rinominare gli scripts all'interno della tua web/ directory da .php a php5. L'errore ottenuto lanciando symfony da una linea di comando PHP 4 è simile a questo:

    Parse error, unexpected ',', expecting '(' in .../symfony.php on line 19.
    
  • Il limite della memoria, definita nel php.ini, deve essere impostat almeno a 16M. Il segnale tipico di questo problema è la comparsa di un errore installando symfony via PEAR o utilizzando la linea di comando.

    Allowed memory size of 8388608 bytes exhausted
    
  • Il parametro zend.ze1_compatibility_mode del file php.ini deve essere settato su off. Altrimenti provando ad utilizzare la tua applicazione otterrai un errore di "implicit cloning":

    Strict Standards: Implicit cloning object of class 'sfTimer'because of 'zend.ze1_compatibility_mode'
    
  • Le directories log/ e cache/ del tuo progetto devono permettere la scrittura al server web. Utilizzare la tua applicazione senza questi permessi genera una exception:

    sfCacheException [message] Unable to write cache file"/usr/myproject/cache/frontend/prod/config/config_config_handlers.yml.php"
    
  • L'include path del tuo sistema deve include il percorso al comando php, e l'include path del tuo php.ini deve contenere il percorso a PEAR (se utilizzato).

  • Può capitare che sul sever esistano più file php.ini (ad esempio se utilizzi il pacchetto WAMP). Utilizza phpinfo() per capire l'esatta locazione del file php.ini utilizzato dalla tua applicazionie.

NOTE Inoltre, non obbligatorio ma fortemente raccomandato per questioni di performance, impostare a off i parametri magic_quotes_gpc e register_globals del tuo php.ini.

Symfony Resources

Puoi verificare se il tuo problema si sia già verificato e qualcuno abbia trovato una soluzione in diversi luoghi:

Se non trovi una risposta, prova a porre la tua domanda alla community. Puoi aprire una discussione sul forum, utilizzare la mailing list, o persino collegari al canale IRC #symfony così da avere un riscontro dagli utenti più attivi della community.

Source Versioning

Una volta che il setup dell'applicazione è fatto, è raccomandato iniziare con il processo di source versioning (o version control). Source versioning mantiene traccia di tutte le modifiche nel codice, dando accesso alle precedenti releases, facilitando le operazioni di patching, e permettendo un ottimo lavoro di gruppo. Symfony nativamente supporta CVS, anche se Subversion (http://subversion.tigris.org/) è raccomandato. Il seguente esempio mostra i comandi di Subversion, e presuppone che tu abbia Subversion già installato sul server e che tu voglia creare un nuovo repository per il tuo progetto. Per gli utenti Windows, come programma client per Subversion è consigliato TortoiseSVN (http://tortoisesvn.tigris.org/). Per maggiori informazioni riguardo il source versioning e sui comandi utilizzati, puoi consultare la documentazione Subversion.

Nell'esempio seguente presupponiamo che $SVNREP_DIR sia definita come variabile d'ambiente. Se non fosse definita devi utilizzare l'attuale posizione del repository al posto di $SVNREP_DIR.

Bene, creiamo un nuovo repository per il progetto myproject:

> svnadmin create $SVNREP_DIR/myproject

Ora creiamo la struttura base (layout) del repository con le directories trunk, tags e branches directories tramite questo comando:

> svn mkdir -m "layout creation" file:///$SVNREP_DIR/myproject/trunk file:///$SVNREP_DIR/myproject/tags file:///$SVNREP_DIR/myproject/branches

Questa sarà la tua prima revisione. Ora devi importare i files del tuo progetto ad eccezione dei files temporanei delle cartelle cache e log:

> cd ~/myproject
> rm -rf cache/*
> rm -rf log/*
> svn import -m "initial import" . file:///$SVNREP_DIR/myproject/trunk

Controlla quali file sono stati influenzati dal commit digitando:

> svn ls file:///$SVNREP_DIR/myproject/trunk/

Sembra tutto ok. Ora il repository SVN ha il reference version (e la storia) di tutti i files del tuo progetto. questo significa che i files in ~/myproject/ devono far riferimento al repository. Per ottenere ciò, prima rinomina la directory ~/myproject/ --potrai rimuoverla non appena tutto funzionerà bene-- e poi fai un checkout del repository in una nuova direcotry:

> cd ~
> mv myproject myproject.origin
> svn co file:///$SVNREP_DIR/myproject/trunk myproject
> ls myproject

Questo è tutto. Adesso puoi lavorare con i file posizionati in ~/myproject/ e fare il commit delle tue modifiche nel repository. Non dimenticare di fare un po' di pulizia eliminando la cartella myproject.origin/, ormai inutilizzata.

C'è ancora una cosa da configurare. Nel fare il commit della tua directory di lavoro, potresti copiare anche files non voluti, come quelli dentro le cartelle cache e log del tuo progetto. Per questo devi creare una lista di files da ignorare per SVN. Inoltre devi re-impostare i permessi corretti per le directories cache/ e log/:

> cd ~/myproject
> chmod 777 cache
> chmod 777 log
> svn propedit svn:ignore log
> svn propedit svn:ignore cache

Verrà lanciato il text editor di default di SVN. Non appena succede puoi specificare quale editor utilizzare con SVN digitando:

> export SVN_EDITOR=<name of editor>
> svn propedit svn:ignore log
> svn propedit svn:ignore cache

Ora semplicemente puoi aggiungere tutti i file delle subdirectories di myproject/ che SVN dovrà ignorare al momento del commit:

*

Salva ed esci. Hai finito.

Riepilogo

Per testare e 'giocare' con symfony sul tuo server locale, la miglior soluzione d'installazione è senza dubbio il sandbox, il quale contine un ambiente symfony preconfigurato.

Per un utilizzo su un server di sviluppo o uno di produzione, meglio optare per l'installazione via PEAR o quella tramite SVN. Queste installarenno le librerie symfony, e tu dovrai inizializzare il progetto e una applicazione. L'ultimo passo di installazione è la configuazione del server, che può essere fatta in diversi modi. Symfony funziona perfettamente con i virtual host, la soluzione raccomandata.

Se riscontri problemi durante l'installazione, potrai trovare molti tutorials e risposte alle domande frequenti (F.A.Q) sul sito symfony. Se necessario, puoi esporre il tuo problema alla community symfony, e ricevere una risposta veloce ed efficace.

Una volta che il tuo progetto è inizializzato è buona norma partire con un processo di version-control.

Adesso sei pronto ad usare symfony, ed è tempo di capire come realizzare una semplice web application.