dcodegroup/laravel-state-machines 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dcodegroup/laravel-state-machines

最新稳定版本:1.1.0

Composer 安装命令:

composer require dcodegroup/laravel-state-machines

包简介

Generates state machine classes for Laravel

README 文档

README

This Laravel package simplifies the creation of state machines for your models, inspired by Jake Bennett's talk at Laracon US Nashville in 2023.

Features

  • Database migrations for managing statuses and tracking status history.
  • Artisan command to effortlessly generate state machines with states and transitions, for your specified model.

Installation & setup

You can install the package via composer:

composer require dcodegroup/laravel-state-machines

You can publish the migration files for statuses and statusables via the artisan command:

php artisan vendor:publish --tag=statuses-migrations

This command allows you to customize and adapt the migrations according to your specific needs.

Creating state machines

Run the php artisan make:state-machine command to create your first state machines. The command accepts a model as an argument, states and transitions as options.

php artisan make:state-machine User --states=Accepted,Pending,Rejected --transitions=approve,deny

This example will generate the following state machines under the App/StateMachines/User directory:

  • UserStateContract.php which all transitions as methods.
  • BaseUserState.php which implements the UserStateContract and automatically throws an exception for each transition.
  • AcceptedState.php, PendingState.php, RejectedState.php which extend the BaseUserState.

You can also change the default namespace for your model if they are not stored under App/Models with the --namespace option. e.g. --namespace=App\\ACL.

Configuring statuses on a model.

Add the HasStates trait to your model and add a status_id column to that same model. Implement the state method on your model, so it returns the user state contract.

use App\StateMachines\Users\AcceptedState;
use App\StateMachines\Users\PendingState;
use App\StateMachines\Users\RejectedState;
use http\Exception\InvalidArgumentException;

public function state()
{
    return match($this->status->machine_name) {
        'accepted' => new AcceptedState($this),
        'pending' => new PendingState($this),
        'rejected' => new RejectedState($this),
        'default' => throw new InvalidArgumentException('Invalid state'),
    }
}

Using state

Call the state method from you model and chain it with a transition method. e.g.

$user->state()->approve();

Default model state

You can set a default state on your model by overriding the $defaultState property defined in the HasStates trait.

Assigning a state

You can change the status of your model by using the setStatus() method which accepts a status machine name as an argument.

统计信息

  • 总下载量: 9.52k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 3
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-01-22