Archivo de la categoría: Symfony

Apartado para el mundo de la programación en Symfony

Redirect a homepage según idioma

Cuando implementamos los idiomas en Symfony nos encontramos que al acceder a la ruta de la homepage “/” no encuentra ninguna ruta y evidentemente nos aparece un error. Esto se debe a que al definir la ruta de la homepage con el prefijo del idioma, la ruta sin este prefijo no existe. Para solucionar este problema podemos definir la ruta con el path “/” para que nos realize un redirect a la ruta de la homepage con el variable locale predefinida.

Muestro un ejemplo:

root:
    path: /
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /es
        permanent: true
app:
    resource: '@AppBundle/Controller/'
    type: annotation
    prefix: /{_locale}
    requirements:
        _locale: es|en

Nuevo registro de logs en Symfony

Aquí explicaré como configurar un nuevo registro de logs en Symfony, pudiendo así separar los logs según nuestro criterio.

En el fichero app/config/config.yml configuramos los parámetros de nuestro nuevo log, definiendo el canal, el nombre que le queremos asignar y el fichero en el cual se escribirán los logs.

# Log Configuration
monolog:
    channels: [mylogchannel]
    handlers:
        mylogchannel:
            level: debug
            type: stream
            path: '%kernel.logs_dir%/mylogfile.log'
            channels: [mylogchannel]

Ahora para utilizarlo en el controlador primero debemos coger el servicio “logger” y a continuación introducir nuestro “handler” previamente creado para que así los nuevos registros de log se escriban en el fichero que se ha configurado.

$logger = $this->get('logger');
$loggerHandler = $this->get('monolog.handler.mylogchannel');

$logger->setHandlers(array($loggerHandler));

$logger->info('I just got the logger');
$logger->error('An error occurred');
$logger->debug('An error occurred');

Para utilizarlo dentro de un servicio:

services:
    my_service:
        class: Fully\Qualified\Loader\Class\Name
        arguments: ['@logger']
        tags:
            - { name: monolog.logger, channel: mylogchannel }

Aviso: al usarlo de esta manera en el controlador los logs solo serán escritos en el fichero indicado puesto que lo indicamos con el “handler” y en el servicio al indicarlo con el “channel” todos los logs que recogan este canal aparecerá los logs en su fichero.

A continuación dejo un enlace a la web oficial de como crear un nuevo registro de logs en Symfony, para más información: symfony.com