Mejoras de Symfony 4.1 - La inyección de Parámetros

symfony_1.jpg
Solucionex
25
Jul 18

Una de las mejoras/novedades que trae Symfony 4.1 que más útil nos ha parecido es la inyección de los parámetros en los servicios.

Hasta ahora cuando queríamos inyectar un parámetro en un servicio, había que hacerlo en la declaración del servicio, de la siguiente manera:

# config/services.yaml services: # ... mi_servicio: class: AppBundle\Services\MiServicio arguments: [%parametro1%] // src/Service/MiServicio.php class MiServicio { private $param1; public function __construct(string $parametro1) { $this->param1 = $parametro1; } }

Con Symfony 4.1 esto es mucho más cómodo, sobre todo si lo combinamos con el autowiring de Symfony, la declaración automática de servicios. Ya que por defecto un servicio que necesite un parámetro se le podrá inyectar de la siguiente forma:

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

De esta manera no nos hará falta escribir nada en el config/services.yml para configurarlo, ya que automáticamente cogerá los parámetros de la aplicación y podremos acceder al que necesitemos.

Si bien es cierto que esta opción quizá nos quite algo de autonomía y control, ya que a cualquier servicio se le pueden inyectar todos los parámetros, en vez de enviarle solo los que necesitaba en cada momento.

Sin embargo ganamos mucha agilidad a la hora de programar y de declarar los servicios, que a la cuando desarrollamos aplicaciones Symfony son la parte más importante.