Skip to content

DeSmart/laravel-enum

Repository files navigation

PHP enums for Laravel models 📚

Latest version Tests Software License

Package provides a simple way to use strongly typed enum objects with Laravel models. It utilizes Laravel's custom casting mechanism.

Installation

To install the package via Composer, simply run the following command:

composer require desmart/laravel-enum

Usage

Create an enum class that extends DeSmart\Laravel\Enumeration. Then, simply define all possible values in form of class constants:

class Character extends DeSmart\Laravel\Enumeration
{
    const GOOD = 'good';
    const EVIL = 'evil';
    const SOMETIMES_GOOD_SOMETIMES_EVIL = 'sometimes_good_sometimes_evil';
}

In Laravel model:

class Hero extends Model
{
    /**
     * @var array
     */
    protected $casts = [
        'character' => Character::class,
    ];
}

That's it.

$hero = new Hero(['character' => Character::EVIL]);

dump($hero);
// Hero {#293
//  ...
//  #casts: array:1 [
//    "character" => "Character"
//  ]
// ...
//  #attributes: array:1 [
//    "character" => "evil"
//  ]
// }

dump($hero->character);
// Character {#296
//  -value: "evil"
// }

Enumeration class generation

Package provides make:enum Artisan command for enumeration classes auto-generation. To generate new enum class, run:

php artisan make:enum Character --cases='good,evil,sometimes_good_sometimes_evil'

--cases (or -c) option allows defining available enum cases. Command can be run without that option specified.

Above command will create a new class inside Enums directory:

namespace App\Enums;

use DeSmart\Laravel\Enumeration\Enumeration;

/**
 * @method static Character good()
 * @method static Character evil()
 * @method static Character sometimesGoodSometimesEvil()
 */
class Character extends Enumeration
{
	const GOOD = 'good';
	const EVIL = 'evil';
	const SOMETIMES_GOOD_SOMETIMES_EVIL = 'sometimes_good_sometimes_evil';
}

Changelog

Please see CHANGELOG for more information what has changed recently.

License

The MIT License (MIT). Please see License File for more information.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages