exabyssus/laravel-finite-state

迷你Laravel有限状态机。

v1.0.6 2019-03-19 12:32 UTC

This package is auto-updated.

Last update: 2024-09-07 01:53:25 UTC


README

Latest Stable Version Latest Unstable Version Total Downloads License

该包提供了一个简单的方法,可以将状态机添加到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事件。