Los archivos de configuración se transforman en código PHP y la mayoría de sus opciones solamente son utilizadas por el framework. Sin embargo, en ocasiones es necesario acceder a los archivos de configuración desde el código de la aplicación (en las acciones, plantillas, clases propias, etc.) Se puede acceder a todas las opciones definidas en los archivos settings.yml
, app.yml
y module.yml
mediante una clase especial llamada sfConfig
.
5.5.1. La clase sfConfig
Desde cualquier punto del código de la aplicación se puede acceder a las opciones de configuración mediante la clase sfConfig
. Se trata de un registro de opciones de configuración que proporciona un método getter que puede ser utilizado en cualquier parte del código:
// Obtiene una opción
opcion = sfConfig::get('nombre_opcion', $valor_por_defecto);
También se pueden crear o redefinir opciones desde el código de la aplicación:
// Crear una nueva opción
sfConfig::set('nombre_opcion', $valor);
El nombre de la opción se construye concatenando varios elementos y separándolos con guiones bajos en este orden:
- Un prefijo relacionado con el nombre del archivo de configuración (
sf_
parasettings.yml
,app_
paraapp.yml
,mod_
paramodule.yml
) - Si existen, todas las claves ascendentes de la opción (y en minúsculas)
- El nombre de la clave, en minúsculas
No es necesario incluir el nombre del entorno de ejecución, ya que el código PHP solo tiene acceso a los valores definidos para el entorno en el que se está ejecutando.
El listado 5-16 muestra el código necesario para acceder a los valores de las opciones definidas en el archivo app.yml
mostrado en el listado 5-15.
Listado 5-15 - Ejemplo de configuración del archivo app.yml
all:
.general:
impuestos: 19.6
usuario_por_defecto:
nombre: Juan Pérez
email:
webmaster: [email protected]
contacto: [email protected]
dev:
email:
webmaster: [email protected]
contacto: [email protected]
Listado 5-16 - Acceso a las opciones de configuración desde el entorno de desarrollo
echo sfConfig::get('app_impuestos'); // Recuerda que se ignora el nombre de la categoría
// Es decir, no es necesario incluir 'general'
=> '19.6'
echo sfConfig::get('app_usuario_por_defecto_nombre');
=> 'Juan Pérez'
echo sfConfig::get('app_email_webmaster');
=> '[email protected]'
echo sfConfig::get('app_email_contacto');
=> '[email protected]'
Las opciones de configuración de Symfony tienen todas las ventajas de las constantes PHP, pero sin sus desventajas, ya que se puede modificar su valor durante la ejecución de la aplicación.
Considerando el funcionamiento que se ha mostrado, el archivo settings.yml
que se utiliza para establecer las opciones del framework en cada aplicación, es equivalente a realizar varias llamadas a la función sfConfig::set()
. Así que el listado 5-17 se interpreta de la misma forma que el listado 5-18.
Listado 5-17 - Extracto del archivo de configuración settings.yml
all:
.settings:
csrf_secret: false
escaping_strategy: off
escaping_method: ESC_SPECIALCHARS
Listado 5-18 - Forma en la que Symfony procesa el archivo settings.yml
sfConfig::add(array(
'sf_csrf_secret' => 'false',
'sf_escaping_strategy' => 'false',
'sf_escaping_method' => 'ESC_SPECIALCHARS',
));
El Capítulo 19 explica el significado de las opciones de configuración del archivo settings.yml
.
5.5.2. El archivo app.yml y la configuración propia de la aplicación
El archivo app.yml
, que se encuentra en el directorio miproyecto/apps/frontend/config/
, contiene la mayoría de las opciones de configuración relacionadas con la aplicación. Por defecto el archivo está vacío y sus opciones se configuran para cada entorno de ejecución. En este archivo se deben incluir todas las opciones que necesiten modificarse rápidamente y se utiliza la clase sfConfig
para acceder a sus valores desde el código de la aplicación. El listado 5-19 muestra un ejemplo.
Listado 5-19 - Archivo app.yml
que define los tipos de tarjeta de crédito aceptados en un sitio
all:
tarjetascredito:
falsa: off
visa: on
americanexpress: on
dev:
tarjetascredito:
falsa: on
Para saber si las tarjetas de crédito falsas se aceptan en el entorno de ejecución de la aplicación, se debe utilizar la siguiente instrucción:
sfConfig::get('app_tarjetascredito_falsa');
Nota Si quieres definir un array de elementos bajo la clave all
, es necesario que utilices el nombre de una categoría, ya que de otro modo Symfony trata cada uno de los valores de forma independiente, tal y como se muestra en el ejemplo anterior.
all:
.array:
tarjetascredito:
falsa: off
visa: on
americanexpress: on
print_r(sfConfig::get('app_tarjetascredito'));
Array(
[falsa] => false
[visa] => true
[americanexpress] => true
)
Truco Cuando vayas a definir una constante o una opción dentro de un script, piensa si no sería mejor incluir esa opción en el archivo app.yml
. Se trata del lugar más apropiado para guardar todas las opciones de la configuración.
Los requerimientos de algunas aplicaciones complejas pueden dificultar el uso del archivo app.yml
. En este caso, se puede almacenar la configuración en cualquier otro archivo, con el formato y la sintaxis que se prefiera y que sea procesado por un manejador realizado completamente a medida. El Capítulo 19 explica en detalle el funcionamiento de los manejadores de configuraciones.