Skip to content

Workflow API

You can manage workflows with PHP API by using WorkflowServiceInterface.

Workflow service

Workflow uses the Symfony Workflow Component, extended in the workflow service.

The service implements the following methods:

  • start - places a content item in a workflow
  • apply - performs a transition
  • can - checks if a transition is possible

The methods apply and can are the same as in Symfony Workflow, but the implementation in workflow service extends them, for example by providing messages.

Getting workflow information

To get information about a specific workflow for a content item, use WorkflowServiceInterface::loadWorkflowMetadataForContent:

1
2
3
4
5
$workflowMetadata = $this->workflowService->loadWorkflowMetadataForContent($content, $workflowName);

foreach ($workflowMetadata->markings as $marking) {
    $output->writeln($content->getName() . ' is in stage ' . $marking->name . ' in workflow ' . $workflowMetadata->workflow->getName());
}

Tip

marking, a term from Symfony Workflow, refers to a state in a workflow.

If you already have a VersionInfo object, use WorkflowServiceInterface::loadWorkflowMetadataForVersionInfo to avoid loading the full Content, This method is more efficient when iterating over draft versions:

1
2
$versionInfo = $content->getVersionInfo();
$workflowMetadataByVersion = $this->workflowService->loadWorkflowMetadataForVersionInfo($versionInfo, $workflowName);

To get a list of all workflows that can be used for a given content item, use WorkflowRegistryInterface::getSupportedWorkflows:

1
$supportedWorkflows = $this->workflowRegistry->getSupportedWorkflows($content);

Applying workflow transitions

To place a content item in a workflow, use WorkflowServiceInterface::start:

1
$this->workflowService->start($content, $workflowName);

To apply a transition to a content item, use Workflow::apply. Additionally, you can check if the transition is possible for the given object using WorkflowServiceInterface::can:

1
2
3
$workflow = $this->workflowRegistry->getWorkflow($workflowName);
$workflow->apply($workflowMetadata->content, $transitionName, ['message' => 'done', 'reviewerId' => 14]);    
}

Tip

Ibexa\Workflow\Value\WorkflowMetadata object contains all information about a workflow, such as ID, name, transitions and current stage. Ibexa\Workflow\Value\WorkflowMetadata::$workflow gives you direct access to native Symfony Workflow object.