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

Publicada el

20 de marzo de 2020

Etiquetas

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.