ekvedaras / laravel-enum
Laravel integration for 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
This package integrates ekvedaras/php-enum into Laravel by providing enum value casting in models which was introduced in Laravel 7.
Usage
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'); } }
Casting
Payment.php
use Illuminate\Database\Eloquent\Model; class Payment extends Model { protected $casts = [ 'status' => PaymentStatus::class, ]; }
Setting and retrieving status:
$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
Validation
A built in in
validator can be used.
use Illuminate\Validation\Rule; $rules = [ 'status' => Rule::in(PaymentStatus::keys()) ]; // or $rules = [ 'status' => 'in:' . PaymentStatus::keyString(), ];
Changelog
See changes in changelog files: