El componente de Workflow proporciona utilidades para gestionar un flujo de trabajo o una máquina de estados.
Para instalar el componente de Workflow con Flex, hay que utilizar el siguiente comando:
> composer require symfony/workflow
Creación de un Workflow
Un Workflow es un proceso o un ciclo de vida a través del cual se mueven nuestros objetos. Cada paso, fase, estado, etc en el proceso se denomina place. Los objetos cambian de un place a otro mediante transitions.
Para definir un Workflow por tanto, es necesario definir:
- places
- transitions
Veamos un ejemplo de configuración de un workflow:
# config/packages/workflow.yaml framework: workflows: solicitud_presupuesto: type:'workflow' marking_store: type:'method' property: 'status' supports: - App\Entity\AppRequest places: - pendiente - aprobada - rechazada initial_marking: pendiente transitions: aprobar: from: pendiente to: aprobada rechazar: from: pendiente to: rechazada
Este Workflow actuará sobre entidades App\Entity\AppRequesty utilizará la propiedad status para almacenar el place o los places de la entidad.
Si marking_store está definida como multiple_state, la entidad podrá estar en más de un place simultáneamente.
Si marking_store está definida como single_state, la entidad solamente podrá estar en un place simultáneamente.
Un ejemplo de entidad Articulo podría ser el siguiente:
/** * Articulo * * @ORM\Table(name="articulo")} * @ORM\Entity */ class Articulo { /** * @var int * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="titulo", type="string", length=255, nullable=false) */ private $titulo; /** * @var string * * @ORM\Column(name="contenido", type="string", length=255, nullable=false) */ private $contenido; /** * Esta es la propiedad utilizada por el marking_store * * @var array * * @ORM\Column(type="json_array", nullable=true) */ private $estado; }
Si el workflow es single_state o state_machine, entonces la propiedad estado se definiría como string:
... /** * Esta es la propiedad utilizada por el marking_store * * @var string * * @ORM\Column(type="string", nullable=true) */ private $estado; ...