Sitio web no optimizado para IE 6

Symfony: Actualizar Tus Proyectos En 1.2 Hacia 1.3/1.4

posteado por Emiliano, categoría Symfony

1 dic
2009

Este post es una traducción del upgrade tutorial del sitio oficial de Symfony. En el se explica como actualizarte tus proyectos realizados en Symfony 1.2 hacia las nuevas releases 1.3 y 1.4.

Antes de empezar a actualizar nuestros proyectos, cabe destacar que en el blog de Symfony recomienda que si ya tienes un proyecto funcionando en la versión 1.2 lo actualices a la versión 1.3; y si estas por comenzar un nuevo proyecto lo hagas con la nueva versión LTS (Long Term Support) 1.4.

A continuación se describirá los cambios hechos en symfony 1.3/1.4 y que es lo que necesitas para realizar una actualización de tus proyectos en symfony 1.2. Si quieres más detalles acerca de las nuevas versiones 1.3/1.4, puedes leer el tutorial What's new?.

Symfony 1.3/1.4 es compatible con PHP 5.2.4 o superior. Podría trabajar con PHP 5.2.0 ó 5.2.3 pero no esta garantizado.

 

Actualizando a 1.4


No existe un comando para symfony 1.4 , ya que esta versión es la misma que symfony 1.3 (excepto por las características desatendidas). Para actualizarte a 1.4, primero debes actualizarte a 1.3, y luego hacia la release 1.4.

Antes de que te actualices a 1.4, puedes validar que tu proyecto no usa ninguna clase, método, función o configuración desatendida en 1.4, esto lo puedes hacer con el comando project:validate:

root@mylinux:~$ php symfony project:validate

Este comando lista todos los archivos que necesitas cambiar antes de actualizarte a Symfony 1.4.

Hay que tener en cuenta que este comando no puede detecter todo, solo debe considerarselo útil para identificar posibles problemas. Para mayor seguridad deberías de leerte el tutorial de características desatendidas.

Los plugins sfCompat10Plugin y sfProtoculousPlugin han sido eliminados de 1.4. Por lo tanto, si en tu proyecto no los usas y los estás desactivando, puedes eliminar toda mención a estos plugins.

 

¿Como actualizarse a 1.3?


Para actualizar tu proyecto debes:

  • # Verificar que todos los plugins que usas en tu proyecto sean compatibles con symfony 1.3.

  • # Si no utilizas ninguna herramienta SCM, deberías de hacer un backup de tu proyecto.

  • # Actualiza symfony a la versión 1.3.

  • # Actualiza los plugins a su versión 1.3.

  • # Ejecuta el comando project:upgrade1.3 desde el directorio de tu proyecto para realizar una actualización automática:

    root@mylinux:~$ php symfony project:upgrade1.3
    Este comando puede ser ejecutado varias veces sin ningún efecto contrario. Cada vez que te actualizas a una release beta o la final release de 1.3 deberás ejecutar este comando.

 

  • # Necesitarás reconstruir tu modelo y formularios:

    #Doctrine
    root@mylinux:~$ php symfony doctrine:build --all-classes

    #Propel
    root@mylinux:~$ php symfony propel:build --all-classes
  • # Limpia la cache:

    root@mylinux:~$ php symfony cache:clear

 

Autoloading

A partir de symfony 1.3, los archivos bajo el directorio lib/vendor/ no son cargados más por defecto. Si deseas autocargar algun subdirectorio dentro de la carpeta lib/vendor/ , debes agregar una nueva entrada en el archivo de configuración autoload.yml:

  autoload:
    vendor_some_lib:
      name: vendor_some_lib
      path: %SF_LIB_DIR%/vendor/some_lib_dir
      recursive: on

El autoloading del directorio lib/vendor/ fué problematico por varias razones:

  • # Si pones una libreria en el directorio lib/vendor/ la cual ya tiene un mecanismo de autoload, symfony re-parseara los archivos y agregará un puñado de información innecesaria en la cache.

  • # Si tu directorio de symfony no es exactamente lib/vendor/symfony/, el autoloader del proyecto re-parseara el directorio de symfony y podrían ocurrir algunos problemas.

El Autoloading en symfony 1.3 ahora es case-insensitive.

Routing

En symfony 1.3, la cache para el ruteo esta desactivada, esta es la mejor opción para la mayoría de los proyectos, mejorando su performance. Entonces, si no personalizas la cache de ruteo, esta estará desactivada para todas tus aplicaciones por defecto. Si después de actualizarte a 1.3, tu proyecto es más lento, podrías agregar algunas reglas a la cache de ruteo para ver si te ayuda. Este es el archivo de configuración por defecto de symfony 1.2, el cual puedes agregar en tu 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

Task

El comando *:data-load ha sido modificado. Ahora se debe especificar los directorios o archivos por medio de argumentos del comando. Y la opción --dir ha sido eliminada.

root@mylinux:~$ php symfony doctrine:data-load data/fixtures/dev

Integración con Doctrine

A partir de las versiones 1.3/1.4, Doctrine es el ORM por defecto y ha sido actualizado a su última versión, la 1.2, si lo deseas puedes leer más sobre que es lo nuevo en Doctrine 1.2.

Plugins

Si utilizas el método enableAllPluginsExcept() para administrar los plugins activos en tu clase ProjectConfiguration, ahora debes tener la precaución de ordenar los plugins por nombre para asegurarte la consistencia a través de diferentes plataformas.

Widgets

Como mencionamos en el post anterior, ahora la clase sfWidgetFormInput es abstracta. Los campos de textos ahora son creados con la clase sfWidgetFormInputText. Este cambio fue hecho para facilitar la introspección de las clases Form.

Mailer

Symfony 1.3 viene con un nuevo mailer . Y cuando creamos una nueva aplicación, el archivo factories.yml ya tiene una configuración por defecto para los entornos de desarrollo y test. Entonces, si actualizas un proyecto existente hacia 1.3, deberías de actualizar tu factories.yml con la siguiente configuración para estos entornos:

  mailer:
    param:
      delivery_strategy: none

Con la configuración de arriba, no se envían e-mails. Por supuesto, el mailer tester trabajara correctamente en tus tests funcionales.

Si deseas recibir todos los e-mails en una sola dirección de correo, puedes usar la estrategia de envío single_address (por ejemplo en el entorno de desarrollo):

  mailer:
    param:
      delivery_strategy: single_address
      delivery_address: mymail@example.com

YAML

sfYAML ahora es compatible con las especificaciones 1.2. Alguno de los cambios que podrías necesitar hacer en tus archivos de configuración de yaml son los siguientes:

Los booleanos ahora solo pueden ser representados por los strings true o false. Si estas utilizando la siguiente sintáxis alternativa en tus archivos de configuración deberías de remplazarlos por sus correspondientes valores true o false:

  • # on, y, yes, +
  • # off, n, no, -

 

El comando project:upgrade te dirá donde estas usando la vieja sintáxis pero no la corregirá (para evitar borrar comentarios por ejemplo). Por lo tanto, deberás corregirla a mano.

Si no quieres checkear todos tus archivos YAML, puedes forzar la YAML parser para que use las especificaciones 1.1 por medio del método sfYaml::setSpecVersion():

sfYaml::setSpecVersion('1.1');

Propel

El ORM Propel usado en versiones anteriores de symfony ha sido actualizado la la nueva versión Propel 1.4. Para tomar ventaja de esto debes actualizar tu archivo propel.ini.

Debes eliminar las viejas clases builder:

; 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

Y agregar las nuevas clases behavior:

; 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

El comando project:upgrade intentará hacer estos cambios por ti, pero podría quedarse solo en el intento, por eso verifica tu archivo propel.ini.

La clase BaseFormFilterPropel era generada incorrectamente en lib/filter/base en symfony 1.2. Esto ha sido corregido en symfony 1.3; y la clase ahora es generada en lib/filter. El comando project:upgrade moverá este archivo por ti.

Tests

El archivo bootstrap para unit test (test/bootstrap/unit.php), ha sido mejorado para manejar de mejor manera el autoloading de las clases del proyecto. Las siguientes lineas deben ser agregadas a este script:

<?php
$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(); ?>

El comando project:upgrade intentará hacer estos cambios por ti, pero podría quedarse solo en el intento, por eso, revisa el archivo test/bootstrap/unit.php.

Esto es todo para poder actualizarse desde Symfony 1.2 hacia las nuevas versiones 1.3/1.4. Espero que les sirva.

 

Fuente: Symfony project

Compártelo: technorati Symfony: Actualizar Tus Proyectos En 1.2 Hacia 1.3/1.4 digg Symfony: Actualizar Tus Proyectos En 1.2 Hacia 1.3/1.4 facebook Symfony: Actualizar Tus Proyectos En 1.2 Hacia 1.3/1.4 google Symfony: Actualizar Tus Proyectos En 1.2 Hacia 1.3/1.4 linkedin Symfony: Actualizar Tus Proyectos En 1.2 Hacia 1.3/1.4

4 Comentarios:


truecrack:

09 de Diciembre de 2009 a las 05:05:58

Excelente, gracias por la tradución, porque desde el blog de symfony no entiendo inglés, voy a probar actualizarme sf, despues te cuento como me fue, nuevamente gracias.

ideados:

23 de Febrero de 2010 a las 18:24:11

Al hacer symfony -V indica que tengo la version 1.2.9 pero al ejecutar el comando ./symfony project:validate indica que no existe la tarea Al hacer symfony list sale en project: project :clear-controllers :deploy :disable :enable :freeze :permissions :unfreeze :upgrade1.1 :upgrade1.2 Me falta instalar algo? Muchas Gracias! Gustavo

Fred:

11 de Agosto de 2010 a las 21:21:56

Hola a todos yo tengo un proyecto hecho en symfony-1.0.13 y quiero hacerlo correr y trabajas en symfony-1.4.3 alguien me podria decir como puedo hacer esto o no hay forma de hacer esto gracias de antemano

Damian:

20 de Agosto de 2010 a las 02:24:32

@Fred, si tienes tu proyecto en Symfony 1.0.X creo que tendrás muchas incompatibilidades con Symfony 1.4.X, ya que el framework dio un salto considerable cuando pasó a su versión 1.1.X, por ejemplo, incluyendo el framework para formularios, pienso que para hacer este upgrade deberás reescribir grandes partes de tu proyecto. Saludos.

Comentar este Artículo






Captcha ImageReload_original