ekvedaras / laravel-enum
Laravel 对 ekvedaras/php-enum 的集成
v1.0.2
2020-12-30 12:55 UTC
Requires
- php: >=7.2
- ext-json: *
- ekvedaras/php-enum: ^1.1
- illuminate/support: ^7|^8
Requires (Dev)
- orchestra/testbench: ^5.4|^6.0
- phpunit/phpunit: ^8.5.8
README
此包通过提供在模型中枚举值转换,将 ekvedaras/php-enum 集成到 Laravel 中,这是 Laravel 7 中引入的。
用法
PaymentStatus.php
use EKvedaras\LaravelEnum\Enum; class PaymentStatus extends Enum { /** * @return static */ final public static function pending(): self { return static::get('pending', 'Payment is pending'); } /** * @return static */ final public static function completed(): self { return static::get('completed', 'Payment has been processed'); } /** * @return static */ final public static function failed(): self { return static::get('failed', 'Payment has failed'); } }
转换
Payment.php
use Illuminate\Database\Eloquent\Model; class Payment extends Model { protected $casts = [ 'status' => PaymentStatus::class, ]; }
设置和检索状态
$payment = new Payment(); // It is advised to always set enum objects instead of strings for better usage analysis $payment->status = PaymentStatus::pending(); // However, above works the same as this $payment->status = 'pending'; // or this $payment->status = PaymentStatus::pending()->id(); dump($payment->status === PaymentStatus::pending()); // true $payment->status = 'invalid'; // throws OutOfBoundsException
验证
可以使用内置的 in
验证器。
use Illuminate\Validation\Rule; $rules = [ 'status' => Rule::in(PaymentStatus::keys()) ]; // or $rules = [ 'status' => 'in:' . PaymentStatus::keyString(), ];
变更日志
查看变更日志文件中的更改