This light package provides some methods to your Enum classes to make the most of them.
azimkordpour/power-enum is a Laravel package for this light package provides some methods to your enum classes to make the most of them..
It currently has 41 GitHub stars and 22.862 downloads on Packagist (latest version v1.2).
Install it with composer require azimkordpour/power-enum.
Discover more Laravel packages by azimkordpour
or browse all Laravel packages to compare alternatives.
Last updated
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.
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
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.
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.
active:$post = Post::find(1);
// The status is active.
$post->status->isActive();
Returns boolean:
true
$post = Post::find(1);
// The status is active.
$post->status->equals(PostStatus::Active);
Returns boolean:
false
equals:$post = Post::find(1);
// The status is active.
$post->status->is(PostStatus::Active);
Returns boolean:
false
$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.
PostStatus statically:PostStatus::values();
Returns an array:
[
'active',
'inactive'
]
PostStatus statically:PostStatus::names();
Returns an array:
[
'Active',
'Inactive'
]
PostStatus statically:PostStatus::list();
Returns an array:
[
'Active' => 'active',
'Inactive' => 'inactive'
]
PostStatus::from('active')->isActive();
Returns boolean:
true
PostStatus::Active->equals(AnotherEnum::Example);
Returns boolean:
false
equals:PostStatus::Active->is(AnotherEnum::Example);
Returns boolean:
false
PostStatus::fromName('Active');
Returns the Enum object:
PostStatus::Active
PostStatus::Active->label();
Returns the value of the case if you have not set labels:
"active"
PostStatus::Active->getLabels();
Returns the values of the cases if you have not set labels:
[
'active' => 'active',
'inactive' => 'inactive'
]
/**
* 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'
]
composer test