desmart / laravel-enum
PHP enums for Laravel models
Requires
- php: ^7.4|^8.0
- desmart/php-enum: ^1.0
- illuminate/contracts: ^8.12
- illuminate/database: ^8.12
- illuminate/support: ^8.12
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.3.3
This package is auto-updated.
Last update: 2024-11-17 17:27:54 UTC
README
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.