This package integrates ekvedaras/php-enum into Laravel by providing enum value casting in models which was introduced in 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,
];
}
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
A built in in
validator can be used.
use Illuminate\Validation\Rule;
$rules = [
'status' => Rule::in(PaymentStatus::keys())
];
// or
$rules = [
'status' => 'in:' . PaymentStatus::keyString(),
];
See changes in changelog files: