azimkordpour / power-enum
This light package provides some methods to your Enum classes to make the most of them.
Installs: 13 531
Dependents: 1
Suggesters: 0
Security: 0
Stars: 41
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/azimkordpour/power-enum
Requires
- php: ^8.1
Requires (Dev)
- laravel/pint: ^1.21
- pestphp/pest: ^2.8
- phpstan/phpstan: ^2.1
- rector/rector: ^2.0
- symfony/var-dumper: ^7.2
README
This lightweight package provides a Trait that allows you to fully utilize Enum classes in your PHP projects, particularly in modern PHP frameworks like Laravel.
Installation
NOTE: As Enum was introduced in PHP 8.1, this package requires a minimum PHP version of 8.1.
You can install the package via composer:
composer require azimkordpour/power-enum
Usage Instructions
To use the PowerEnum trait in your Enum class, simply import it like this:
<?php use AzimKordpour\PowerEnum\Traits\PowerEnum; enum PostStatus: string { use PowerEnum; case Active = 'active'; case Inactive = 'inactive'; }
Now, let's take a closer look at the methods.
In Laravel
Eloquent allows you to cast your attribute values to PHP Enums.
<?php namespace App\Models; use App\Enums\PostStatus; use Illuminate\Database\Eloquent\Model; class Post extends Model { /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'status' => PostStatus::class, ]; }
Then, you can use it like the below examples.
Check if the status of the model is active:
$post = Post::find(1); // The status is active. $post->status->isActive();
Returns boolean:
true
Check if the status of the model equals the given value:
$post = Post::find(1); // The status is active. $post->status->equals(PostStatus::Active);
Returns boolean:
false
This method works like equals:
$post = Post::find(1); // The status is active. $post->status->is(PostStatus::Active);
Returns boolean:
false
Get the label of the status:
$post = Post::find(1); // The status is active. $post->status->label();
Returns the value of the case if you have not set labels:
"active"
For setting custom labels and Seeing all methods in PHP projects, take a look at the next section.
All Methods
Get the values of PostStatus statically:
PostStatus::values();
Returns an array:
[
'active',
'inactive'
]
Get the names of PostStatus statically:
PostStatus::names();
Returns an array:
[
'Active',
'Inactive'
]
Get the names and values of PostStatus statically:
PostStatus::list();
Returns an array:
[
'Active' => 'active',
'Inactive' => 'inactive'
]
Check if the case is the active one:
PostStatus::from('active')->isActive();
Returns boolean:
true
Check if the case equals the given value:
PostStatus::Active->equals(AnotherEnum::Example);
Returns boolean:
false
This method works like equals:
PostStatus::Active->is(AnotherEnum::Example);
Returns boolean:
false
Initiate the class from name:
PostStatus::fromName('Active');
Returns the Enum object:
PostStatus::Active
Get the label of the case:
PostStatus::Active->label();
Returns the value of the case if you have not set labels:
"active"
Get the labels of the cases:
PostStatus::Active->getLabels();
Returns the values of the cases if you have not set labels:
[
'active' => 'active',
'inactive' => 'inactive'
]
You can write custom label for the cases in your Enum class:
/** * Set the labels of all the cases. */ public static function setLabels(): array { return [ self::Active->value => 'published post', self::Inactive->value => 'draft post', ]; }
Then, the method of label:
PostStatus::Active->label();
Returns:
"published post"
And the method of getLabels:
PostStatus::Active->getLables();
Returns:
[
'active' => 'published post',
'inactive' => 'draft post'
]
Testing
composer test