Nuevo en Symfony 5.1: Inyección automática de propiedades con tipos

Las propiedades tipadas de PHP, que se añadieron en PHP 7.4, son una de las funcionalidades más importantes que PHP ha añadido en años. En Symfony 5.1, estamos usándolas para implementar funcionalidades como la extracción de información de propiedades en el componente PropertyInfo.

Considera el siguiente ejemplo que usa propiedades tipadas:

use Twig\Environment;
 
class SomeServiceClass
{
    /** @required */
    public Environment $twig;
 
    public function someMethod()
    {
        $this->twig->render('...');
        // ...
    }
}

En las versiones Symfony anteriores, este ejemplo no funcionaba porque el servicio Twig no se inyectaba correctamente. Sin embargo, en Symfony 5.1 este ejemplo si que funciona como se espera. El motivo es que Symfony 5.1 inyecta automáticamente todas las propiedades públicas que están tipadas con clases relacionadas con servicios y que incluyan la anotación @required.

Cosas a tener en cuenta:

  • Solamente se inyectan las propiedades públicas; las propiedades protegidas y privadas no se inyectan nunca para evitar confusiones.
  • En la práctica, esta funcionalidad es equivalente a la inyección vía setter, que tiene muchos inconvenientes y solo debería utilizarse en escenarios concretos.

En cualquier caso, recuerda que esta funcionalidad es solo una más de las herramientas que te da Symfony para automatizar la creación de objectos y servicios. Si no encaja en tu forma de desarrollar aplicaciones, sigue usando la inyección tradicional de servicios basada en constructores y propiedades privadas.

Esta funcionalidad fue contribuida por Sébastien Morel en el pull request #34769.


Fuente: New in Symfony 5.1: Autowire public typed properties

Comentarios

Publicada el

10 de marzo de 2020

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

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