En el capítulo Cómo dominar y crear nuevos entornos, aprendiste cómo gestionar la configuración de tu aplicación. A veces, puedes beneficiar a tu aplicación almacenando ciertas credenciales fuera del código de tu proyecto. La configuración de la base de datos es tal ejemplo. La flexibilidad del contenedor de servicios de Symfony te permite hacer esto fácilmente.
Symfony grabará cualquier variable de entorno con el prefijo SYMFONY__ y lo configurará como parámetro en el contenedor de servicios. Los dobles guiones bajos son reemplazados por un punto, ya que un punto no es un carácter válido en un nombre de variable de entorno.
Por ejemplo, si estás usando Apache, las variables de entorno se pueden fijar usando la siguiente configuración de VirtualHost:
<VirtualHost *:80>
ServerName Symfony2
DocumentRoot "/ruta/a/aplic_symfony_2/web"
DirectoryIndex index.php index.html
SetEnv SYMFONY__DATABASE__USER usuario
SetEnv SYMFONY__DATABASE__PASSWORD secreto
<Directory "/ruta/a/aplic_symfony_2/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
Nota
El ejemplo anterior es una configuración para Apache, con la directiva SetEnv. Sin embargo, esta funcionará para cualquier servidor web compatible con la configuración de variables de entorno.
Además, con el fin de que tu consola trabaje (la cual no utiliza Apache), las tienes que exportar como variables del intérprete. En un sistema Unix, puedes ejecutar las siguientes ordenes:
$ export SYMFONY__DATABASE__USER=usuario
$ export SYMFONY__DATABASE__PASSWORD=secreto
Ahora que has declarado una variable de entorno, estará presente en la variable global $_SERVER de PHP. Entonces Symfony automáticamente fijará todas las variables $_SERVER con el prefijo SYMFONY__ como parámetros en el contenedor de servicios.
Ahora puedes referirte a estos parámetros donde los necesites.
doctrine:
dbal:
driver pdo_mysql
dbname: symfony2_project
user: "%database.user%"
password: "%database.password%"
<!-- xmlns:doctrine="http://symfony.com/schema/dic/doctrine" -->
<!-- xsi:schemaLocation="http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> -->
<doctrine:config>
<doctrine:dbal
driver="pdo_mysql"
dbname="symfony2_project"
user="%database.user%"
password="%database.password%"
/>
</doctrine:config>
$container->loadFromExtension('doctrine', array(
'dbal' => array(
'driver' => 'pdo_mysql',
'dbname' => 'symfony2_project',
'user' => '%database.user%',
'password' => '%database.password%',
)
));
El contenedor también cuenta con apoyo para fijar constantes PHP como parámetros. See Constants as Parameters for more details.
La directiva imports se puede utilizar para extraer parámetros almacenados en otro lugar. Importar un archivo PHP te da la flexibilidad de añadir al contenedor lo que sea necesario. La siguiente directiva importa un archivo llamado parameters.php.
# app/config/config.yml
imports:
- { resource: parameters.php }
<!-- app/config/config.xml -->
<imports>
<import resource="parameters.php" />
</imports>
// app/config/config.php
$loader->import('parameters.php');
Nota
Un archivo de recursos puede tener uno de muchos tipos. Los recursos PHP, XML, YAML, INI y cierre son compatibles con la directiva imports.
En parameters.php, dile al contenedor de servicios los parámetros que deseas configurar. Esto es útil cuando la configuración importante está en un formato no estándar. El siguiente ejemplo incluye la configuración de una base de datos Drupal en el contenedor de servicios de Symfony.
// app/config/parameters.php
include_once('/ruta/a/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);