exabyssus / laravel-finite-state
迷你Laravel有限状态机。
v1.0.6
2019-03-19 12:32 UTC
Requires
- php: >=7.1
README
该包提供了一个简单的方法,可以将状态机添加到Eloquent模型中。
状态机可以帮助您控制状态流并记录状态历史。
安装
将包添加到您的composer中。
composer require exabyssus/laravel-finite-state
发布包以复制配置和迁移文件。
php artisan vendor:publish --provider="Exabyssus\StateMachine\StateMachineServiceProvider"
将特性添加到您想要添加状态机的模型中
use Exabyssus\StateMachine\Traits\HasStateHistory;
use Exabyssus\StateMachine\Traits\HasStateMachine;
class YourModel extends Model
{
use HasStateMachine;
use HasStateHistory;
...
}
配置状态机转换
config/state-machine.php
配置
<?php
return [
'order' => [ // Name of your object
'state_property_name' => 'state', // Objects current state property name
'states' => [ // All available states
'pending',
'confirmed',
],
'transitions' => [ // Transition mapping
'confirm' => [
'from' => ['pending'],
'to' => 'confirmed'
],
'cancel' => [
'from' => ['pending', 'confirmed'],
'to' => 'canceled'
],
]
],
];
用法
检查对象是否允许转换
transitionAllowed (strign $status): bool
应用转换
transition(string $transition): void
获取可用转换
getPossibleTransitions(): array
事件
要在状态改变之前捕获对象,将afterStateChange
方法添加到您的类中。
function beforeStateChange($transition, $stateFrom, $stateTo)
如果函数返回false
,则状态不会改变。
状态改变后,会调用afterStateChange
方法。
function afterStateChange($transition, $stateTo)
并且会分发StateChanged
事件。