ekvedaras/laravel-enum

Laravel integration for ekvedaras/php-enum

v1.0.2 2020-12-30 12:55 UTC

This package is auto-updated.

Last update: 2024-11-20 16:51:48 UTC


README

Tests Code Coverage Software License Latest Version on Packagist Total Downloads

Twitter Follow

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: