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
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.