1. Go to this page and download the library: Download lexik/workflow-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lexik / workflow-bundle example snippets
namespace Project\Bundle\SuperBundle\Workflow\Model;
use Lexik\Bundle\WorkflowBundle\Model\ModelInterface;
use Project\Bundle\SuperBundle\Entity\Post;
/**
* This class is used to wrap a Post entity.
* It's not }
public function setStatus($status)
{
$this->post->setStatus($status);
}
public function getStatus()
{
return $this->post->getStatus();
}
/**
* Returns an unique identifier.
*
* @return mixed
*/
public function getWorkflowIdentifier()
{
return md5(get_class($this->post).'-'.$this->post->getId());
}
/**
* Returns data to store in the ModelState.
*
* @return array
*/
public function getWorkflowData()
{
return array(
'post_id' => $this->post->getId(),
'content' => $this->post->getContent(),
// ...
);
}
/**
* Returns the final object.
* If your entity implements ModelInterface itself just return $this.
*
* @return object
*/
public function getWorkflowObject()
{
return $this->post;
}
}
namespace Project\Bundle\SuperBundle\Workflow\Listener;
use Lexik\Bundle\WorkflowBundle\Event\StepEvent;
use Lexik\Bundle\WorkflowBundle\Event\ValidateStepEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PostPublicationProcessSubscriber implements EventSubscriberInterface
{
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
'post_publication.published.validate' => array(
'handleAccessValidationPublished',
),
'post_publication.published.validation_fail' => array(
'handleValidationFail',
),
);
}
public function handleAccessValidationPublished(ValidateStepEvent $event)
{
if ( ! $event->getModel()->canBePublished()) {
$event->addViolation('error message');
}
}
public function handleValidationFail(StepEvent $event)
{
// ...
}
}
namespace Project\Bundle\SuperBundle\Workflow\Listener;
use Lexik\Bundle\WorkflowBundle\Event\StepEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PostPublicationProcessSubscriber implements EventSubscriberInterface
{
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
'post_publication.published.reached' => array(
'handleSuccessfullyPublished',
),
);
}
public function handleSuccessfullyPublished(StepEvent $event)
{
// ...
}
}
namespace Project\Bundle\SuperBundle\Workflow\Listener;
use Lexik\Bundle\WorkflowBundle\Event\StepEvent;
use Lexik\Bundle\WorkflowBundle\Event\ValidateStepEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PostPublicationProcessSubscriber implements EventSubscriberInterface
{
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
'post_publication.published.unpublish.pre_validation' => array(
'preValidate',
),
'post_publication.published.unpublish.pre_validation_fail' => array(
'preValidationFail',
),
);
}
public function preValidate(ValidateStepEvent $event)
{
// do your checks
}
public function preValidationFail(StepEvent $event)
{
// process code in case the pre validation fail
}
}
class FakeModel implements ModelInterface, ModelStateInterface
{
//...
protected $states = array();
public function addState(ModelState $modelState)
{
$this->states[] = $modelState;
}
public function getStates()
{
return $this->states;
}
// get your object
// Set states on your object
$this->get('lexik_workflow.model_storage')->setStates($post);
// Get all your objects and set your process and only state successful
$this->get('lexik_workflow.model_storage')->setStates($posts, ['process'], true);
// create a model object (see the PostModel class defined previously in the Model object section)
$model = new PostModel($myPost);
// get the process handler
$processHandler = $container->get('lexik_workflow.handler.post_publication');
// start the process
$modelState = $processHandler->start($model);
// $model->getStatus() === Project\Bundle\SuperBundle\Entity\Post::STATUS_DRAFT
// reach the next state
$modelState = $processHandler->reachNextState($model, 'validate'); // here 'validate' is the key defined in the draft_created next states.
// $model->getStatus() === Project\Bundle\SuperBundle\Entity\Post::STATUS_VALIDATED
if ( ! $modelState->getSuccessful() ) {
var_dump($modelState->getErrors());
}
php
public function registerBundles()
{
return array(
// ...
new Lexik\Bundle\WorkflowBundle\LexikWorkflowBundle(),
// ...
);
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.