Memorias de un desarrollador

Actualizando Symfony2.0 a Symfony2.1

Antes de enfrentar la tarea de actualizar el sitio web de symfony madrid a la versión 2.1 decidí ir anotando todos los pasos, por si a alguien le podían llegar a ser últiles.

Lo primero fue obtener una copia de composer.json de la distribución estandar.

wget https://raw.github.com/symfony/symfony-standard/master/composer.json

y descargar el binario de composer, si es que no lo tienes ya instalado.

curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Actualizando dependencias

Esta es la parte más engorrosa de todas, consiste en cambiar las antiguas dependencias del fichero deps al nuevo formato basado en composer. Symfony Madrid tenía algunas dependencias extra, por lo que aquí dedique un rato. En tu caso dependerá mucho de lo actualizadas que estén tus dependencias y del número que tengas.

Doctrine Migrations

[doctrine-migrations]
    git=http://github.com/doctrine/migrations.git

[DoctrineMigrationsBundle]
    git=http://github.com/doctrine/DoctrineMigrationsBundle.git
    target=/bundles/Symfony/Bundle/DoctrineMigrationsBundle

No encontre la correspondencia de esta dependencia, es necesario comentar la referencia en el AppKernel.php, seguramente estaŕa por hay, pero tampoco era una dependencia necesaria así que no le dedique mas tiempo.

$bundles = array(
            ...
            //new Symfony\Bundle\DoctrineFixturesBundle\DoctrineFixturesBundle(),

Doctrine Extensions

[doctrine-extensions]
    git=http://github.com/beberlei/DoctrineExtensions.git

Tampoco encontre esta dependencia, posiblemente se encuentre dentro de alguno de los repositorios de doctrine ahora.

Doctrine Fixtures

[doctrine-fixtures]
    git=http://github.com/doctrine/data-fixtures.git
[DoctrineFixturesBundle]
    git=http://github.com/doctrine/DoctrineFixturesBundle.git
    target=/bundles/Symfony/Bundle/DoctrineFixturesBundle

Añadi la dependencia.

"require": {
    ...
    "doctrine/doctrine-fixtures-bundle": "dev-master" 
}

LadyBug

[Ladybug]
    git=http://github.com/raulfraile/Ladybug.git
    target=ladybug

[RaulFraileLadybugBundle]
    git=http://github.com/raulfraile/LadybugBundle.git
    target=bundles/RaulFraile/Bundle/LadybugBundle
            

Añadi la siguiente dependencia.

"require": {
    ...
    "raulfraile/ladybug-bundle": "dev-master" 
}

TinymceBundle

[TinymceBundle]
    git=git://github.com/stfalcon/TinymceBundle.git
    target=/bundles/Stfalcon/Bundle/TinymceBundle

Me gusta mantener al mínimo la cantidad de Bundles de terceros, y en concreto este no es necesario. Configurar TinyMCE es sencillo sin necesidad de tener que utilizar un bundle externo. Elimino la referencia en el AppKernel.php.

FeedBundle

[FeedBundle]
    git=http://github.com/Nek-/FeedBundle.git
    target=/bundles/Nekland/FeedBundle

Este bundle en concreto generaba un problema desde tiempos remotos en symfony-madrid, que en alguna ocasión nos ha dejado en mal lugar, por generar un error 500 en todo el sitio, no se exactamente cual será el problema, pero creo que este bundle tampoco aporta lo suficiente como para ponerse a investigar. Elimino la referencia en el AppKernel.php.

RSSClientBundle

[RSSClientBundle]
    git=http://github.com/desarrolla2/RSSClientBundle.git
    target=/bundles/Desarrolla2/Bundle/RSSClientBundle
"require": {
    ...
    "desarrolla2/rss-client-bundle": "dev-master" 
}

Actualizando NamesPaces y ficheros de configuración

Algunos NameSpaces han sufrido cambios por lo que descargo la última versión.

mv app/AppKernel.php app/AppKernel_20.php
wget https://raw.github.com/symfony/symfony-standard/master/app/AppKernel.php -P app

Ahora toca copiar y pegar los bundles que tengas activos, en mi caso aproveche, para poner por ejemplo el DoctrineFixturesBundle solo disponible para el entorno de desarrollo.

public function registerBundles()
    {
    $bundles = array(
        ...
        new SFM\WebsiteBundle\SFMWebsiteBundle(),
        new Desarrolla2\Bundle\RSSClientBundle\RSSClientBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        ...
        $bundles[] =new Symfony\Bundle\DoctrineFixturesBundle\DoctrineFixturesBundle();
        //$bundles[] =new Symfony\Bundle\DoctrineMigrationsBundle\DoctrineMigrationsBundle();
        }

    return $bundles;
    }

El fichero app/autoload.php tambien ha cambiado.

rm app/autoload.php
wget https://raw.github.com/symfony/symfony-standard/master/app/autoload.php -P app

Elimino el contenido de la carpeta vendor y cache.

rm -rf vendor/* app/cache/* app/bootstrap.php.cache
chmod -R 777 app/cache

y ejecuto el instalador.

php composer.phar install

Me da errores, indicando que tengo algunos campos que sobran en el config.yml.

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] 

  There is no extension able to load the configuration for "nekland_feed" (in /home/dgonzalez/NetBeansProjects/symfony-madrid/app/config/config.yml). Looked for namespace "nekland_feed", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "jms_aop", "jms_di_extra", "jms_security_extra", "rss_client", "web_profiler", "sensio_distribution"

Retiro las entradas referentes a los bundle que he eliminado stfalcon_tinymce y nekland_feed, y continuo obteniendo errores.

[RuntimeException]
  The charset setting is deprecated. Just remove it from your configuration file. 

[RuntimeException]                                                                  
  The auto_start setting is deprecated. Just remove it from your configuration file.  

[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]  
  Unrecognized options "default_locale" under "framework.session" 

[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]  
  Unrecognized options "secure_controllers" under "jms_security_extra"  

Elimino estas entradas tambien y continuo con los errores.

[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]  
  Unrecognized options "users" under "security.providers.in_memory"

En este caso solo se trata de cambiar el bloque security tal y como aparece.

security:
    ...
    providers:
        default_provider:
            memory:
                users:
                  user1: { password: pass1, roles: ROLE_ADMIN }

Y listo !!, ya tengo mi sitio listo y con un motor symfony 2.1 bajo el capó.