Archivos de Categoría: Symfony2

Arreglar “Cannot redeclare class Symfony\…” en Symfony2 después de actualizar

Después de actualizar de Symfony 2.2 a la versión 2.3 me apareció este fallo en mi aplicación:

Fatal error: Cannot redeclare class Symfony\Component\HttpFoundation\FileBag in app/cache/prod/classes.php on line 1823

Otro síntoma era este otro error al tratar de limpiar la cache del entorno de producción:

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]
The parameter "kernel.http_method_override" must be defined.

El proceso para solucionar el problema fue:

1.- Borrar la carpeta de la cache de producción:

rm -rf app/cache/prod

2.- Limpiar la cache del entorno de producción:

php app/console cache:clear --env=prod --no-debug

Ref:

Actualizar composer y todos los paquetes instalados con él

php composer.phar self-update
php composer.phar update

Symfony2 – ErrorException: Notice: serialize() [function.serialize]: “xxx” returned as member variable from __sleep() but does not exist in …

Al guardar una entidad de Doctrine2 en la sesión bajo un proyecto Symfony2 me apareció este error:

ErrorException: Notice: serialize() [function.serialize]: "entity_property" returned as member variable from __sleep() but does not exist in ...vendor/symfony/symfony/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php line 27

Este error estaba apareciendo porque mi propiedad “entity_property” estaba declarada como private y PHP tiene algunos problemas al serializar objetos que heredan de alguna clase con propiedades privadas. Con solo cambiar la declaración a protected (tal y como debería haber estado siempre…) el error desapareció.

Ref: http://blog.geertvd.be/2011/09/25/symfony2-id-returned-as-member-variable-from-__sleep-but-does-not-exist

Instalar Doctrine2 con PEAR en MacPorts

Ejecutar estos comandos:

sudo /opt/local/bin/pear channel-discover pear.doctrine-project.org
sudo /opt/local/bin/pear channel-discover pear.symfony.com
sudo /opt/local/bin/pear install -a pear.doctrine-project.org/DoctrineORM-2.3.3
sudo /opt/local/bin/pear install pear.doctrine-project.org/DoctrineSymfonyConsole
sudo /opt/local/bin/pear install pear.doctrine-project.org/DoctrineSymfonyYaml

A partir de ahí ejecutar doctrine -v debería funcionar pero la ruta /opt/local/lib/php tiene que estar en el include_path de tu instalación de PHP. Intenté incluirla en mi fichero /opt/local/etc/php5/php.ini pero no funcionó, así que añadí la siguiente línea como la primera línea del programa /opt/local/bin/doctrine.php:

set_include_path(get_include_path() . PATH_SEPARATOR . '/opt/local/lib/php');

Entonces ya tendría que funcionar sin problemas.

Ref: http://delboy1978uk.wordpress.com/2012/06/26/installing-doctrine-2-2-2-on-mac-os-x/

Usar el php de MacPorts desde la línea de comandos

Hace un tiempo instalé Apache+MySQL usando MacPorts en Mac OS X. Todo iba bien siempre y cuando estuviera navegando por las páginas usando un navegador, pero en cuanto usé PHP mediante el CLI para ejecutar comandos de Symfony2 comenzaron los problemas. Me decía que no tenía configurada la zona horaria, y yo estaba seguro de haberla configurado en el fichero php.ini.

$ php app/console doctrine:schema:update --force

  
[ErrorException] Warning: date_default_timezone_get(): It is not safe to rely on the system' s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those me thods and you are still getting this warning, you most likely misspelled th e timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' ins tead in /Users/enekochan/Documents/Webs/este.es/vendor/monolog/monolog/src/ Monolog/Logger.php line 199

          

Buscando una solución por internet me di cuenta de que el problema era que estaba ejecutando el php binario que viene con Mac OS X, y en ese no tenía configurada la zona horaria. Se puede ver de donde se lee el fichero php.ini ejecutando esto:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => (none)

La primera solución que se me ocurrió fue usar la ruta completa al php binario de MacPorts:

$ /opt/local/bin/php app/console doctrine:schema:update --force
$ /opt/local/bin/php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /opt/local/etc/php5
Loaded Configuration File => /opt/local/etc/php5/php.ini

Una mejor solución consiste en añadir la ruta /opt/local/bin al path del sistema antes que la ruta /usr/bin. Esto se puede hacer editando el fichero ~/.bash_profile:

PATH=/opt/local/bin:$PATH;export PATH

Luego hay que cerrar y volver a abrir el terminal o recargar el ~/.bash_profile:

$ source ~/.bash_profile

Ref: Stackoverflow

  • Page 1 of 2
  • 1
  • 2
  • >