Nuevo en Symfony 4.1: Parámetros de configuración como servicio

Las aplicaciones Symfony modernas que utilizan autowiring pueden eliminar la mayor parte de la configuración de sus servicios. Simplemente con añadir un type-hint en los argumentos del constructor de un servicio Symfony ya sabe qué servicios inyectar.

La única excepción son los parámetros de configuración (ejemplo kernel.project_dir), que son cadenas de texto, números, arrays, etc. y no pueden inyectarse como un servicio. La solución es utilizar la configuración local de servicios, que permite definir los parámetros una sola vez y aplicarlos en los consturctores de todos los servicios que usen esos parámetros:

# config/services.yaml
services:
    # ...
    _defaults:
        bind:
            $projectDir: '%kernel.project_dir%'

No obstante, si algún servicio en particular requiere muchos parámetros (o a lo mejor en algún caso extremo, todos los parámetros) entonces esta opción no es viable. Por eso en Symfony 4.1 hemos añadido una opción para obtener todos los parámetros de configuración mediante un servicio.

Para ello solamente tienes que añadir un argumento en el constructor de tu servicio con el type-hint ParameterBagInterface o ContainerBagInterface:

// src/Service/MessageGenerator.php
// ...
 
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
 
class MessageGenerator
{
    private $params;
 
    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }
 
    public function someMethod()
    {
        $parameterValue = $this->params->get('parameter_name');
        // ...
    }
}

Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #25288.

Fuente: New in Symfony 4.1: Getting container parameters as a service

Comentarios

Publicada el

23 de febrero de 2018

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.