The symfony Reference Book

Aggiornare i Progetti da 1.2 a 1.3/1.4

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony Reference Book" which is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com

Chapter Content

Aggiornare a symfony 1.4

Come aggiornare a symfony 1.3?

Deprecati

Autoload

Routing

JavaScript e Fogli di Stile

Rimozione del filtro common

Task

Formatter

Escape

Integrazione con Doctrine

Versione richiesta di Doctrine

Cancellazione nell'admin generator

Sovrascrittura dello schema doctrine dei plugin

Log delle Query

Plugin

Widget

Mailer

YAML

Propel

Test

symfony training
Be trained by symfony experts
May 29: Paris (Web Development with Symfony2 - Français)
May 31: Paris (Mastering Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - English)
Jun 06: Paris (Going Further with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony Reference Book" in Italian for the 1.4 version - Switch to version: - Switch to language:
Creative Commons License This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License.
The symfony reference guide
Support symfony!
Buy this book
or donate.
Buy The symfony reference guide from amazon.com

Questo documento descrive i cambiamenti fatti in symfony 1.3/1.4 e cosa serve per aggiornare i propri progetti basati su symfony 1.2.

Per informazioni più dettagliate su cosa è stato modificato/aggiunto in symfony 1.3/1.4, si può leggere il tutorial Che c'è di nuovo?.

symfony 1.3/1.4 è compatibile con PHP 5.2.4 e versioni successive. Potrebbe funzionare anche con PHP 5.2.0 fino a 5.2.3, ma non è garantito.

Aggiornare a symfony 1.4

Non c'è un task per aggiornare in symfony 1.4, essendo tale versione la stessa di symfony 1.3 (meno tutte le caratteristiche deprecate). Per aggiornare alla 1.4, si deve prima aggiornare alla 1.3 e poi passare al rilascio 1.4.

Prima di aggiornare alla 1.4, si può anche verificare che il progetto non usi classi, metodi, funzioni, impostazioni, ecc... deprecati, usando il task project:validate:

$ php symfony project:validate

Il task elenca tutti i file che hanno bisogno di modifiche prima del passaggio a symfony 1.4.

Si faccia attenzione al fatto che il task usa un'espressione regolare e quindi potrebbe dare molti falsi positivi. Inoltre, non è in grado di rilevare tutto, quindi è solamente uno strumento di aiuto nell'identificazione di possibili problemi, non una bacchetta magica. Occorre comunque leggere attentamente la pagina DEPRECATED.

sfCompat10Plugin e sfProtoculousPlugin sono stati rimossi dalla 1.4. Se erano stati esplicitamente disabilitati nei file delle classi di configurazione del progetto, come config/ProjectConfiguration.class.php, si devono eliminare tutti i riferimenti a tali file.

Come aggiornare a symfony 1.3?

Per aggiornare un progetto:

Le sezioni seguenti spiegano le modifiche principali fatte in symfony 1.3 che necessitano di alcuni aggiornamenti (automatici o meno).

Deprecati

Durante lo sviluppo di symfony 1.3, sono stati deprecate e rimosse alcune impostazioni, classi, metodi, funzioni e task. Si faccia riferimento al Deprecati in 1.3 per maggiori informazioni.

Autoload

Da symfony 1.3, i file nella cartella lib/vendor/ non sono più caricati automaticamente. Se si desidera l'autoload di alcune sottocartelle di lib/vendor/, aggiungere una nuova voce nel file di configurazione autoload.yml dell'applicazione:

autoload:
  vendor_some_lib:
    path:      %SF_LIB_DIR%/vendor/some_lib_dir
    recursive: true

Il caricamento automatico della cartella lib/vendor/ era problematico per diverse ragioni:

L'autoload in symfony 1.3 non tiene più conto delle differenze tra maiuscole e minuscole.

Routing

I metodi sfPatternRouting::setRoutes(), sfPatternRouting::prependRoutes(), sfPatternRouting::insertRouteBefore() e sfPatternRouting::connect() non restituiscono le rotte come array, come invece facevano nelle precedenti versioni.

L'opzione lazy_routes_deserialize è stata rimossa, poiché non è più necessaria.

Da symfony 1.3, la cache per il routing è disabilitata, poiché questa è l'opzione migliore per la maggior parte dei progetti in cui le prestazioni sono importanti. Quindi, se la cache del routing non era stata personalizzata, sarà automaticamente disabilitata per tutte le applicazioni. Se, dopo l'aggiornamento alla versione 1.3, il progetto risulta più lento, si potrebbe voler aggiungere la cache del routing, per vedere se questo migliora le cose. Questa è la configurazione predefinita di symfony 1.2, che si può aggiungere nuovamente in factories.yml:

routing:
  param:
    cache:
      class: sfFileCache
      param:
        automatic_cleaning_factor: 0
        cache_dir:                 %SF_CONFIG_CACHE_DIR%/routing
        lifetime:                  31556926
        prefix:                    %SF_APP_DIR%/routing

JavaScript e Fogli di Stile

Rimozione del filtro common

sfCommonFilter è stato deprecato e non più usato di default. Questo filtro serviva per inserire automaticamente i tag per JavaScript e fogli di stile nel contenuto della risposta. Ora si deve includere manualmente questi elementi richiamando esplicitamente gli helper include_stylesheets() e include_javascripts() nel layout:

<?php include_javascripts() ?>
<?php include_stylesheets() ?>

Il filtro è stato rimosso per diverse ragioni:

Come aggiornare?

La classe sfCommonFilter è ancora inclusa in symfony 1.3, quindi la si può ancora usare in filters.yml, se necessario.

Task

Le seguenti classi di task sono state rinominate:

symfony 1.2 symfony 1.3
sfConfigureDatabaseTask sfDoctrineConfigureDatabaseTask o sfPropelConfigureDatabaseTask
sfDoctrineLoadDataTask sfDoctrineDataLoadTask
sfDoctrineDumpDataTask sfDoctrineDataDumpTask
sfPropelLoadDataTask sfPropelDataLoadTask
sfPropelDumpDataTask sfPropelDataDumpTask

La firma per i task *:data-load è cambiata. Specifiche cartelle o file ora devono essere forniti come parametri. L'opzione --dir è stata rimossa.

$ php symfony doctrine:data-load data/fixtures/dev

Formatter

Il terzo parametro di sfFormatter::format() è stato rimosso.

Escape

esc_js_no_entities(), referito da ESC_JS_NO_ENTITIES è stato aggiornato per gestire correttamente i caratteri non-ANSI. Prima di questa modifica, solo i caratteri con valori ANSI da 37 a 177 non subivano escape. Ora subiranno escape solamente i caratteri di barra \, le virgolette ' e " e gli "a capo" \n e \r.

Integrazione con Doctrine

Versione richiesta di Doctrine

Gli external verso Doctrine sono stati aggiornati all'ultima versione di Doctrine 1.2. Si possono avere informazioni sulle novità di Doctrine 1.2 qui.

Cancellazione nell'admin generator

La cancellazione multipla nell'admin generator è stata modificata per scorrere le righe ed eseguire il metodo delete() su ciascuna di esse singolarmente, piuttosto che eseguire una singola query DQL per cancellarle tutte. Questo per fare in modo che siano invocati gli eventi per la cancellazione di ogni singola riga.

Sovrascrittura dello schema doctrine dei plugin

Si può sovrascrivere il modello incluso in uno schema YAML di un plugin, semplicemente definendo lo stesso modello nel proprio schema locale. Ad esempio, per aggiungere una colonna "email" al modello sfGuardUser di sfDoctrineGuardPlugin, si aggiungano le seguenti righe a config/doctrine/schema.yml:

sfGuardUser:
  columns:
    email:
      type: string(255)

L'opzione package è una caratteristiche di Doctrine ed è usata per gli schemi dei plugin di symfony. Questo non vuol dire che la caratteristica package possa essere usata indipendentemente per impacchettare i propri modelli. Deve essere usata direttamente e solo per i plugin di symfony.

Log delle Query

L'integrazione con Doctrine esegue il log delle query usando sfEventDispatcher, invece che accedendo direttamente all'oggetto logger. Inoltre, l'oggetto di questi eventi è la connessione o il comando che sta eseguendo la query. Il log viene fatto dalla nuova classe sfDoctrineConnectionProfiler, a cui si può accedere tramite l'oggetto sfDoctrineDatabase.

Plugin

Se si usa il metodo enableAllPluginsExcept() per gestire i plugin abilitati nella classe ProjectConfiguration, si faccia attenzione al fatto che ora i plugin sono ordinati per nome, in modo da assicurare coerenza tra piattaforme diverse.

Widget

La classe sfWidgetFormInput è ora astratta. I campi input text ora sono creati con la classe sfWidgetFormInputText. Questa modifica facilita l'introspezione delle classi dei form.

Mailer

Symfony 1.3 ha un nuovo factory mailer. Quando si crea una nuova applicazione, il file factories.yml ha delle impostazioni predefinite per gli ambienti test e dev. Se si aggiorna un progetto esistente, si potrebbe voler aggiornare il file factories.yml con la seguente configurazione per tali ambienti:

mailer:
  param:
    delivery_strategy: none

Con tale configurazione, i messaggi email non saranno inviati. Ovviamente, saranno ancora nei log e il tester mailer funzionerà nei test funzionali.

Se invece si preferisce ricevere tutti i messaggi email a un unico indirizzo, si può usare la strategia di invio single_address (ad esempio per l'ambiente dev):

dev:
  mailer:
    param:
      delivery_strategy: single_address
      delivery_address:  foo@example.com

YAML

sfYAML è ora compatibile con le specifiche 1.2. Ecco le modifiche da fare nei file di configurazione:

Il task project:upgrade dirà dove è usata la vecchia sintassi, ma non la modificherà (per evitare ad esempio di perdere dei commenti). Le correzioni vanno eseguite manualmente.

Se non si vogliono controllare tutti i proprio file YAML, si può forzare il parser YAML a usare le specifiche YAML 1.1, usando il metodo sfYaml::setSpecVersion():

sfYaml::setSpecVersion('1.1');

Propel

Le classi di build personalizzate di Propel, usate nelle versioni precedenti, sono state sostituite dalle nuovi classi di comportamento di Propel 1.4. Per sfruttare questo miglioramento, occorre aggiornare il file propel.ini del progetto.

Rimuovere le vecchie classi di build:

; builder settings
propel.builder.peer.class              = plugins.sfPropelPlugin.lib.builder.SfPeerBuilder
propel.builder.object.class            = plugins.sfPropelPlugin.lib.builder.SfObjectBuilder
propel.builder.objectstub.class        = plugins.sfPropelPlugin.lib.builder.SfExtensionObjectBuilder
propel.builder.peerstub.class          = plugins.sfPropelPlugin.lib.builder.SfExtensionPeerBuilder
propel.builder.objectmultiextend.class = plugins.sfPropelPlugin.lib.builder.SfMultiExtendObjectBuilder
propel.builder.mapbuilder.class        = plugins.sfPropelPlugin.lib.builder.SfMapBuilderBuilder

Aggiungere le nuove classi di comportamento:

; behaviors
propel.behavior.default                        = symfony,symfony_i18n
propel.behavior.symfony.class                  = plugins.sfPropelPlugin.lib.behavior.SfPropelBehaviorSymfony
propel.behavior.symfony_i18n.class             = plugins.sfPropelPlugin.lib.behavior.SfPropelBehaviorI18n
propel.behavior.symfony_i18n_translation.class = plugins.sfPropelPlugin.lib.behavior.SfPropelBehaviorI18nTranslation
propel.behavior.symfony_behaviors.class        = plugins.sfPropelPlugin.lib.behavior.SfPropelBehaviorSymfonyBehaviors
propel.behavior.symfony_timestampable.class    = plugins.sfPropelPlugin.lib.behavior.SfPropelBehaviorTimestampable

Il task project:upgrade prova a fare questa modifica, ma potrebbe non riuscirci in caso di modifiche locali a propel.ini.

La classe BaseFormFilterPropel veniva generata in modo non corretto in lib/filter/base in symfony 1.2. Questo problema è stato risolto in symfony 1.3; la classe ora è generata in lib/filter. Il task project:upgrade si occuperà di spostare questo file.

Test

Il file iniziale per i test unitari, test/bootstrap/unit.php, è stato migliorato per gestire meglio il caricamento automatico dei file delle classi. Le seguenti righe devono essere aggiunte a tale script:

$autoload = sfSimpleAutoload::getInstance(sfConfig::get('sf_cache_dir').'/project_autoload.cache');
$autoload->loadConfiguration(sfFinder::type('file')->name('autoload.yml')->in(array(
  sfConfig::get('sf_symfony_lib_dir').'/config/config',
  sfConfig::get('sf_config_dir'),
)));
$autoload->register();

Il task project:upgrade prova a fare questa modifica, ma potrebbe non riuscirci in caso di modifiche locali a test/bootstrap/unit.php.

Elementi deprecati e rimossi in 1.3 »
« Che c'è di nuovo in symfony 1.3/1.4?

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.