A lo largo del tutorial de Jobeet hemos hablado de los objetos internos de Symfony como sfUser
, sfRequest
, sfResponse
, sfI18N
, sfRouting
, etc. El framework Symfony crea, configura y gestiona automáticamente todos estos objetos. Además, estos objetos siempre son accesibles a través del objeto sfContext
, y como muchos otros elementos del framework, se pueden configurar a través de un archivo de configuración llamado factories.yml
. Este archivo también permite establecer diferentes opciones para cada entorno.
Cuando sfContext
inicializa las factorías, lee el contenido del archivo factories.yml
para determinar el nombre de las clases (class
) y los parámetros (param
) que se pasan al constructor:
response:
class: sfWebResponse
param:
send_http_headers: false
El código anterior hace que cuando Symfony cree la factoría de los objetos de la respuesta, instancie un objeto de la clase sfWebResponse
y pase send_http_headers
como argumento al constructor.
Como puedes personalizar las factorías, es posible emplear tus propias clases para los objetos internos de Symfony en vez de los objetos por defecto. También puedes modificar el comportamiento de las clases por defecto variando los parámetros que se les pasan.
A continuación vamos a ver algunas de las configuraciones propias más interesantes.
23.5.1. El nombre de la cookie
Symfony utiliza una cookie para gestionar las sesiones de usuario. Por defecto, esta cookie se llama symfony
, pero se puede modificar en el archivo factories.yml
. Dentro de la sección all
, añade lo siguiente para cambiar el nombre de la cookie por jobeet
:
# apps/frontend/config/factories.yml
storage:
class: sfSessionStorage
param:
session_name: jobeet
23.5.2. Cómo se guardan las sesiones
La clase por defecto encargada de guardar las sesiones se llama sfSessionStorage
. Esta clase hace uso del sistema de archivos para guardar toda la información de las sesiones. Si dispones de varios servidores web, quizás te interese centralizar el almacenamiento de las sesiones en una base de datos:
# apps/frontend/config/factories.yml
storage:
class: sfPDOSessionStorage
param:
session_name: jobeet
db_table: session
database: propel
db_id_col: id
db_data_col: data
db_time_col: time
23.5.3. El tiempo de expiración de las sesiones
El tiempo de expiración por defecto de las sesiones de usuario es de 1800
segundos. Si quieres modificarlo, hazlo en la sección user
:
# apps/frontend/config/factories.yml
user:
class: myUser
param:
timeout: 1800
23.5.4. Mensajes de log
El entorno prod
no genera por defecto ningún mensaje de log, ya que la clase utilizada por su logger es sfNoLogger
:
# apps/frontend/config/factories.yml
prod:
logger:
class: sfNoLogger
param:
level: err
loggers: ~
Si quieres que se guarden los mensajes de log en algún archivo, puedes cambiar el nombre de la clase de su logger por sfFileLogger
:
# apps/frontend/config/factories.yml
logger:
class: sfFileLogger
param:
level: error
file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%.log
Nota En el archivo de configuración factories.yml
, las cadenas de texto con el formato %XXX%
se reemplazan por su valor correspondiente del objeto sfConfig
. Por tanto, utilizar %SF_APP%
en un archivo de configuración es equivalente a utilizar sfConfig::get('sf_app')
en el código PHP. Esta notación también se puede utilizar en el archivo app.yml
. Su principal utilidad es que permite hacer referencia a la ruta de un directorio sin tener que escribir la ruta completa en el archivo de configuración (simplemente debes indicar SF_ROOT_DIR
, SF_WEB_DIR
, etc.)