uutkukorkmaz / laravel-statuses
一个使管理模型状态更简单的包
v0.1.1
2023-06-29 09:29 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0|^10.0
- spatie/laravel-package-tools: ^1.15
Requires (Dev)
- laravel/pint: ^1.10.3
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.6.3
- orchestra/testbench: ^7.0
- pestphp/pest: ^1
- pestphp/pest-plugin-laravel: ^1
- phpstan/extension-installer: ^1.3.1
- phpstan/phpstan-deprecation-rules: ^1.1.3
- phpstan/phpstan-phpunit: ^1.3.13
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2024-09-17 07:24:19 UTC
README
Laravel Statuses
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)。有关更多信息,请参阅 许可证文件