Nuevo en Symfony 4.1: Mejorados los event listeners
En las aplicaciones que utilizan Symfony 4 es recomendable gestionar los eventos mediante subscribers en vez de listeners ya que solamente los subscribers se configuran automáticamente cuando se utiliza la opción de autoconfiguración de servicios.
No obstante, para las aplicaciones que todavía utilizan listeners, en Symfony
4.1 los hemos mejorado para que soporten el método mágico de PHP __invoke()
.
Si consideras la siguiente configuración de un servicio:
# config/services.yaml App\EventListener\UserListener: tags: [{ name: kernel.event_listener, event: kernel.request }]
Cuando la etiqueta kernel.event_listener
no define el atributo method
,
Symfony ejecuta el método cuyo nombre es on
+ "el nombre del evento en
CamelCase". En este ejemplo, el método a ejecutar sería onKernelRequest()
. En
Symfony 4.1, si el listener no define ese método, Symfony busca el método
__invoke()
y lo ejecuta si existe.
Así que en Symfony 4.1, la clase UserListener
podría incluir el siguiente
código:
use Symfony\Component\HttpKernel\Event\GetResponseEvent; class UserListener { public function __invoke(GetResponseEvent $event) { // ... } }
Relacionado con este cambio, hemos añadido soporte para __invoke()
en otras
partes del framework, como por ejemplo TemplateController
:
# config/routes.yaml index: path: / # antes de Symfony 4.1 tenías que añadir el nombre del método: 'templateAction' controller: 'Symfony\Bundle\FrameworkBundle\Controller\TemplateController::templateAction' # a partir de Symfony 4.1, TemplateController define un método __invoke() controller: 'Symfony\Bundle\FrameworkBundle\Controller\TemplateController' defaults: template: 'homepage.html.twig'
Esta funcionalidad fue contribuida por Roland Franssen en el pull request #25275.
Fuente: New in Symfony 4.1: Invokable event listeners
Comentarios
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.