Laravel 模型的高级状态支持
发布于 作者 Paul Redmond
Laravel 模型状态是 Spatie 包由 Brent Roose 开发,为 Laravel 模型添加了高级状态支持。
有关此包的完整详细信息,请阅读 官方文档;但是,我们将在下面提供一些来自自述文件的示例,让您了解这个包提供了什么。
这是一个来自自述文件中的 Payment
模型示例,以及如何使用此包为该模型定义状态
use Spatie\ModelStates\HasStates; /** * @property \App\States\PaymentState state */class Payment extends Model{ use HasStates; protected function registerStates(): void { $this ->addState('state', PaymentState::class) ->allowTransition(Pending::class, Paid::class) ->allowTransition(Pending::class, Failed::class, PendingToFailed::class); }}
上面的示例中 PaymentState
定义如下
// The abstract PaymentState classuse Spatie\ModelStates\State; abstract class PaymentState extends State{ abstract public function color(): string;} // The "paid" state for the Payment modelclass Paid extends PaymentState{ public function color(): string { return 'green'; }}
最后,这是一个状态转换的示例
$payment = Payment::find(1); $payment->state->transitionTo(Paid::class); echo $payment->state->color();
根据包的自述文件,它结合了 状态模式 和 状态机 的概念——您应该在使用此包之前熟悉这些概念。视频 状态模式 - 设计模式(第 17 集) 是一个很好的资源,可以帮助您了解状态机的基础知识。
要详细了解此包,请在 GitHub 上查看源代码 spatie/laravel-model-states 并阅读 模型状态文档。
此包已提交到我们的 Laravel 新闻链接 部分。本部分是社区发布有关 Laravel 生态系统的包和教程的地方。请关注 Twitter 上的 @LaravelLinks