laravel-israel / eloquent-status-mutator
Eloquent 模型状态管理特性
0.1
2017-10-05 08:56 UTC
Requires
- laravel/framework: ^5.4.29
Requires (Dev)
- orchestra/testbench: ^3.4
- vlucas/phpdotenv: ^2.4
This package is not auto-updated.
Last update: 2024-09-29 04:03:29 UTC
README
处理模型的状态变化总是很痛苦。
Eloquent 状态转换器提供了一个简单的特性,强制执行正确的状态变化和一些更多酷炫的功能。
使用方法
定义状态
在模型的 statuses
属性中定义模型的状态
class Order extends Model { use HasStatus; protected $statuses = [ 'opened' => [], 'paid' => ['from' => 'opened'], 'approved' => ['from' => 'paid'], 'shipped' => ['from' => ['paid', 'approved']], 'arrived' => ['from' => 'shipped'], 'cancelled' => ['not-from' => ['arrived']], ]; }
自动状态强制
该包确保只能设置列表中的状态
$order->status = 'opened'; // OK $order->status = 'some other status'; // Throws Exception
状态流验证
该包强制状态只能在定义的状态的 'from'
键之后设置
$order->status = 'opened'; $order->status = 'paid'; // OK $order->status = 'arrived'; // Throws Exception
该包还强制执行 'not-from'
状态
$order->status = 'arrived'; $order->status = 'cancelled'; // Throws Exception
辅助函数
$order->status = 'paid'; if ($order->is('paid')) { echo 'The order is shipped'; } if ($order->canBe('shipped')) { echo 'The order can be shipped'; }
前后回调
在某些情况下,我们需要在设置特定状态后执行某些操作 - 例如,在订单取消后发送邮件。我们的包通过 on
+ 状态名称(驼峰命名法)
的约定在状态变化后调用方法
class Order extends Model { use HasStatus; protected $statuses = [ 'opened' => [], 'paid' => ['from' => 'opened'], 'approved' => ['from' => 'paid'], 'shipped' => ['from' => ['paid', 'approved']], 'arrived' => ['from' => 'shipped'], 'cancelled' => ['not-from' => ['arrived']], ]; public function onCancelled() { // Send cancellation mail to the user } }
安装
- 使用 composer 请求此包
composer require laravel-israel/eloquent-status-mutator
- 在您的模型中使用
HasStatus
特性
class Order extends Model { use HasStatus; }
- 在模型中定义可用的状态
protected $statuses = [ 'opened' => [], 'paid' => ['from' => 'opened'], 'approved' => ['from' => 'paid'], 'shipped' => ['from' => ['paid', 'approved']], 'arrived' => ['from' => 'shipped'], 'cancelled' => ['not-from' => ['arrived']], ];