Nuevo en Symfony 5.1: Convertir servicios públicos en privados
Una de las principales razones por las que a los programadores/as les encanta Symfony es cómo se declaran obsoletas las funcionalidades. Gracias a la retrocompatibilidad asegurada puedes actualizar tu aplicación entre versiones menores de Symfony con la garantía de que todo seguirá funcionando.
En Symfony 5.1 hemos añadido una nueva funcionalidad para convertir servicios
públicos en privados mientras se mantiene esa retrocompatibilidad. En la práctica
lo que debes hacer es añadir una etiqueta llamada container.private
a tu
servicio y un par de atributos que expliquen en qué versión se ha declarado
obsoleto el servicio público:
services: foo: # ... public: true tags: - { name: 'container.private', package: 'foo/bar', 'version': '1.2' }
Si tu aplicación intenta acceder al servicio directamente a través del contenedor
($container->get('foo')
) verás el siguiente error:
Since foo/bar 1.2: Accessing the "foo" service directly from the container is deprecated, use dependency injection instead.
Técnicamente esta funcionalidad usa una compiler pass para crear un "alias" público y obsoleto de ese servicio, que ahora es privado. Esto solo se hace si el código accede directamente al servicio (no cuando se usa autowiring) para evitar mostrar mensajes innecesarios.
Ya estamos usando esta funcionalidad en el propio código de Symfony (por ejemplo
para convertir en privado el servicio twig
en el pull request #36739) por
lo que ya puedes utilizarlo tu también en tus propios bundles públicos y tus
aplicaciones privadas.
Esta funcionalidad fue contribuida por Thomas Calvet en el pull request #36470.
Fuente: New in Symfony 5.1: Deprecate public services into private services
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.