1. Go to this page and download the library: Download masterfri/stateful 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/ */
use Masterfri\Stateful\Contracts\Stateful;
use Masterfri\Stateful\Traits\StatefulTrait;
use Masterfri\Stateful\FSM;
class Order extends Model implements Stateful
{
use StatefulTrait;
...
public function createStateMachine()
{
return FSM::build([
'states' => [
'new' => ['initial' => true],
'placed' => [
'enter' => function($model) {
$model->sendCustomerEmail('Your order has been placed', 'placed.tmpl');
},
],
'processed',
'shipped' => [
'enter' => function($model) {
$model->sendCustomerEmail('Your order has been shipped', 'shipped.tmpl');
},
],
'completed' => ['finite' => true],
],
'transitions' => [
// Order is submitted by customer
['new', 'placed', 'submit'],
// Manager processed the order
['placed', 'processed', 'process',
'condition' => function($model) {
return $model->canBeProcessed();
}
],
// Manager reviewed order and marked it as non-processable
['placed', 'completed', 'process',
'condition' => function($model) {
return !$model->canBeProcessed();
},
'transit' => function($model) {
$model->sendCustomerEmail('Sorry your order can not be processed', 'rejected.tmpl');
$model->markAsRejected();
}
],
// Manager received information from delivery service and filled out delivery information on the order
['processed', 'shipped', 'ship'],
// Manager received feedback from customer
['shipped', 'completed', 'close']
]);
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.