9 de febrero de 2013

Parámetros de Symfony en variables de entorno

A veces nos interesa que ciertos parámetros de nuestra configuración estén definidos fuera del código de esta. Por ejemplo, los parámetros de conexión de la base de datos. Para estos casos podemos usar variables de entorno. En Apache lo haríamos así:

    DocumentRoot "c:/xampp/htdocs/dev/public_html/web"
    ServerName symfony.localhost
    SetEnv SYMFONY__DATABASE__USER     "usuario"
    SetEnv SYMFONY__DATABASE__PASSWORD "password"
    SetEnv SYMFONY__DATABASE__NAME "name"

En el caso de que usemos Nginx con PHP-CGI sería algo así:

     location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  app_dev.php;
        include        fastcgi_params;
        fastcgi_param  SYMFONY__DATABASE__USER usuario;
        fastcgi_param  SYMFONY__DATABASE__NAME name;
        fastcgi_param  SYMFONY__DATABASE__PASSWORD password;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
     }

Y luego los recuperamos en el config.yml:

doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database.name%
        user:     %database.user%
        password: %database.password%

Ojo al uso de . y _ . En este caso database_driver, database_host y database_port siguen definidos en el fichero parameteres.ini.

Hay que tener en cuenta que si lanzamos algún script desde consola, tipo php app/console, no tendrá acceso  a las variables de entorno, generando un error:


[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]

You have requested a non-existent parameter "database.user".


Para que funcione correctamente, hay que definir las variables de entorno, usando SET en Windows, o EXPORT en Linux:

SET SYMFONY__DATABASE__USER=usuarioSET SYMFONY__DATABASE__PASSWORD=password
SET SYMFONY__DATABASE__NAME=name

En Windows también podemos hacerlo en la ventana de variables de entorno, Panel de control -> Sistema -> Configuración avanzada del sistema -> Variables de entorno:



Más info en: http://symfony.com/doc/current/cookbook/configuration/external_parameters.html

No hay comentarios: