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.
$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('inactive');
Returns boolean:
false
$post = Post::find(1);
// The status is active.
$post->status->is('inactive');
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::values();
Returns an array:
[
'active',
'inactive'
]
PostStatus::names();
Returns an array:
[
'Active',
'Inactive'
]
PostStatus::list();
Returns an array:
[
'Active' => 'active',
'Inactive' => 'inactive'
]
PostStatus::from('active')->isActive();
Returns boolean:
true
PostStatus::Active->equals('inactive');
Returns boolean:
false
PostStatus::Active->is('inactive');
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