spatie/laravel-model-states

Eloquent 模型的状态支持

2.7.1 2024-03-07 07:05 UTC

README

Latest Version on Packagist Run tests Check & fix styling Total Downloads

此包为模型添加状态支持。它结合了状态模式状态机的概念。

如果您打算使用此包,建议您熟悉这两种模式。

为了让您了解如何使用此包,让我们看看一个快速示例。

想象一个名为 Payment 的模型,它有三个可能的状态:PendingPaidFailed。此包允许您将每个状态表示为一个单独的类,在后台处理状态序列化到数据库,并允许轻松进行状态转换。

为了简化示例,让我们假设根据状态,支付的颜色应该不同。

以下是 Payment 模型的样子

use Spatie\ModelStates\HasStates;

class Payment extends Model
{
    use HasStates;

    protected $casts = [
        'state' => PaymentState::class,
    ];
}

这是抽象的 PaymentState 类的样子

use Spatie\ModelStates\State;
use Spatie\ModelStates\StateConfig;

abstract class PaymentState extends State
{
    abstract public function color(): string;
    
    public static function config(): StateConfig
    {
        return parent::config()
            ->default(Pending::class)
            ->allowTransition(Pending::class, Paid::class)
            ->allowTransition(Pending::class, Failed::class)
        ;
    }
}

以下是某个状态(例如 Paid 状态)的具体实现

class Paid extends PaymentState
{
    public function color(): string
    {
        return 'green';
    }
}

以下是它的使用方式

$payment = Payment::find(1);

$payment->state->transitionTo(Paid::class);

echo $payment->state->color();

支持我们

我们投入了大量资源来创建一流的开源包。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡寄给我们明信片,并提到您正在使用我们的哪个包。您可以在我们的联系页面找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上

安装

您可以通过 composer 安装此包

composer require spatie/laravel-model-states

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Spatie\ModelStates\ModelStatesServiceProvider" --tag="model-states-config"

这是已发布配置文件的内容

return [

    /*
     * The fully qualified class name of the default transition.
     */
    'default_transition' => Spatie\ModelStates\DefaultTransition::class,

];

用法

请参阅文档了解如何使用此包。

测试

composer test

更新日志

请参阅更新日志了解最近更改了什么。

贡献

请参阅贡献指南了解详细信息。

安全

如果您发现有关安全性的错误,请通过[email protected]发送邮件,而不是使用问题跟踪器。

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅许可证文件