uutkukorkmaz/laravel-statuses

一个使管理模型状态更简单的包

v0.1.1 2023-06-29 09:29 UTC

This package is auto-updated.

Last update: 2024-09-17 07:24:19 UTC


README

Laravel Statuses

Laravel Statuses

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Laravel Statuses 是一个使管理模型状态更简单的包。它提供了一个特性,您可以在模型中使用它来添加状态。

安装

您可以通过 composer 安装此包

composer require uutkukorkmaz/laravel-statuses

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

php artisan vendor:publish --tag="statuses-config"

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

return [

    'namespace' => 'Enums\\Statuses',

    'allow_sequential' => true,

];

使用方法

基本用法

要创建新的状态,您可以使用 status:generate 命令。这将生成项目 app/Enums 目录中的一个 Enum

php artisan status:generate OrderStatus

定义情况

您可以通过在 Enum 类中添加常量来定义您状态的情况。常量的名称将用作情况名称,值将用作情况值。

php artisan status:generate OrderStatus --cases Pending,Approved,Processing,Shipped,Delivered

上述命令的结果将是

<?php

namespace App\Enums\Statuses;

enum OrderStatus: string
{
    case PENDING = 'pending';
    case APPROVED = 'approved';
    case PROCESSING = 'processing';
    case SHIPPED = 'shipped';
    case DELIVERED = 'delivered';
}

顺序状态

此类状态用于下一个状态总是枚举中的下一个情况时。例如,如果您有一个用户账户的状态,下一个状态将始终是枚举中的下一个情况。例如,如果当前状态是 PENDING,下一个状态将是 APPROVED

php artisan status:generate AccountStatus --sequential --cases Pending,Approved

上述命令的结果将是

<?php

namespace App\Enums\Statuses;

enum AccountStatus: string
{

    case PENDING = 'pending';
    case APPROVED = 'approved';


    public function next(): self
    {
        return match ($this) {
            self::PENDING => self::APPROVED,
            default => throw new \LogicException('Invalid status'),
        };
    }

    public function previous(): self
    {
        return match($this) {
            self::APPROVED => self::PENDING,
            default => throw new \LogicException('Invalid status'),
        };
    }
}

使用模型的状态

要将状态附加到模型,您可以使用 HasStatus 特性。这个特性将为您的模型添加一个 status 字段。

use Uutkukorkmaz\LaravelStatuses\Concerns\HasStatus;

class Order extends Model
{
    use HasStatus;
    
    // ...
}

您还可以使用以下命令在创建状态时自动将状态附加到模型

php artisan status:generate OrderStatus --model=Order --sequential --cases Pending,Approved,Processing,Shipped,Delivered

请注意,在调用上述命令之前,您应该有模型,并且模型必须具有 protected $casts 行。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
// ...

class Order extends Model
{
    use HasStatus;
    
    // ...
    
    protected $casts = [
      'status' => \App\Enums\Statuses\OrderStatus::class,
    ];
    
    // ...
}

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

鸣谢

许可证

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