1. Go to this page and download the library: Download simon-roland/state-machine 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/ */
simon-roland / state-machine example snippets
use Illuminate\Database\Eloquent\Model;
use SimonRoland\StateMachine\Traits\HasStateMachine;
class Order extends Model
{
use HasStateMachine;
protected $fillable = ['state'];
/**
* Define the attribute that holds the current state.
*
* @return string
*/
protected function getStateAttributeName(): string
{
return 'state';
}
/**
* Define the allowed state transitions.
*
* @return array
*/
protected function getAllowedTransitions(): array
{
return [
'pending' => ['approved', 'rejected'],
'approved' => ['shipped'],
'shipped' => ['delivered', 'returned'],
];
}
}
use App\Models\Order;
// Create a new order
$order = Order::create(['state' => 'pending']);
// Check the current state
echo $order->state; // Outputs: "pending"
// Check if a state transition is possible
if ($order->canTransitionTo('approved')) {
$order->transitionTo('approved');
echo $order->state; // Outputs: "approved"
} else {
echo "Cannot transition to 'approved'.";
}
// Attempting an invalid transition throws an exception
try {
$order->transitionTo('delivered'); // Invalid transition
} catch (\SimonRoland\StateMachine\Exceptions\InvalidStateTransitionException $e) {
echo $e->getMessage(); // Outputs: "Invalid transition from 'approved' to 'delivered'."
}
// Successful transition
$order->transitionTo('shipped');
echo $order->state; // Outputs: "shipped"
namespace App\Enums;
enum OrderState: int
{
case PENDING = 1;
case APPROVED = 2;
case REJECTED = 3;
case SHIPPED = 4;
case DELIVERED = 5;
case RETURNED = 6;
}
use App\Enums\OrderState;
use Illuminate\Database\Eloquent\Model;
use SimonRoland\StateMachine\Traits\HasStateMachine;
class Order extends Model
{
use HasStateMachine;
protected $fillable = ['state'];
protected $casts = [
'state' => OrderState::class,
];
/**
* Define the attribute that holds the current state.
*
* @return string
*/
protected function getStateAttributeName(): string
{
return 'state';
}
/**
* Define the allowed state transitions.
*
* @return array
*/
protected function getAllowedTransitions(): array
{
return [
OrderState::PENDING->value => [OrderState::APPROVED, OrderState::REJECTED],
OrderState::APPROVED->value => [OrderState::SHIPPED],
OrderState::SHIPPED->value => [OrderState::DELIVERED, OrderState::RETURNED],
];
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.