Nuevo en Symfony 5.1: Mejoras en los workflows
Desactivar los eventos "announce"
Los eventos de tipo workflow.announce
se lanzan cada vez que una transición
está disponible para el objeto. En Symfony 5.1 puedes desactivar estos eventos
utilizando el contexto que se pasa al método apply()
:
use Symfony\Component\Workflow\Workflow; $workflow->apply($subject, $transitionName, [Workflow::DISABLE_ANNOUNCE_EVENT => true]);
Comprobar si un workflow existe
Si inyectas el servicio Registry
, tienes acceso a todos los workflows de la
aplicación. En Symfony 5.1, este registro ha añadido un nuevo método llamado
has()
que comprueba si existe algún workflow para el objeto indicado:
use App\Entity\BlogPost; use Symfony\Component\Workflow\Registry; public function myController(Registry $registry, BlogPost $post) { // comprobar si existe un workflow para este objeto if ($registry->has($post)) { // ... } // comprobar si existe un workflow llamado 'publishing_workflow' para este objeto if ($registry->has($post, 'publishing_workflow')) { // ... } // ... }
Explicar por qué se bloquean las transiciones
En Symfony 5.1, cuando se bloquea una transición dentro de un evento, puedes
pasar un mensaje como segundo argumento del método setBlocked()
para explicar
por qué se ha bloqueado la transición:
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Workflow\Event\GuardEvent; class BlogPostReviewListener implements EventSubscriberInterface { public function guardReview(GuardEvent $event) { $blogPost = $event->getSubject(); if (empty($blogPost->title)) { $event->setBlocked(true, 'El artículo no se puede marcar como "revisado" porque no tiene un título.'); } } // ... }
Si no indicas un mensaje personalizado, Symfony crea un mensaje automático con este formato: "The transition has been blocked by a guard ($caller)."
Esta funcionalidad fue contribuida por Grégoire Pineau en el pull request #35322, #34591 y #34573.
Fuente: New in Symfony 5.1: Workflow improvements
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.