Finally, in php81
has been added support
for Enums. But as enums are new in php, we do not have some helpers to work with
that easily. So with our enum-pro package you have pretty more options for working with enums than built-in methods.
It is just trait Lazerg\LaravelEnumPro\EnumPro
which must be added into enum. So it means it use built-in enum class
while enhancing it
composer require lazerg/laravel-enum-pro
Create a new enum class and use our trait on it.
enum LevelTypes: int {
use \Lazerg\LaravelEnumPro\EnumPro;
case VERY_EASY = 1;
case EASY = 2;
case MEDIUM = 3;
case STRONG = 4;
case VERY_STRONG = 5
}
With default functions, if you want to get value of case you should write LevelTypes::VERY_EASY->value
which is little long.
With our package, you can get value of case, by just calling it statically
LevelTypes::VERY_EASY() // 1
As you can see, names here VERY_EASY
, EASY
, MEDIUM
, STRONG
, VERY_STRONG
.
To get all case names of enum. you can use these helper methods:
LevelTypes::names(); // Collection: ['VERY_EASY', 'EASY', 'MEDIUM', 'STRONG', 'VERY_STRONG']
LevelTypes::namesToArray(); // Array: ['VERY_EASY', 'EASY', 'MEDIUM', 'STRONG', 'VERY_STRONG']
LevelTypes::namesToString(); // String: VERY_EASY, EASY, MEDIUM, STRONG, VERY_STRONG
LevelTypes::nameOf(1); // String: VERY_EASY
As you can see, values here 1
, 2
, 3
, 4
, 5
.
Common usage is for: validate incoming request data.
LevelTypes::values(); // Collection: [1, 2, 3, 4, 5]
LevelTypes::valuesToArray(); // Array: [1, 2, 3, 4, 5]
LevelTypes::valuesToString(); // String: 1, 2, 3, 4, 5
LevelTypes::valueOf('very easy'); // 1
Sometimes we need to get random value or values from enum. This is mainly used in factories.
LevelTypes::random(int $count = 1); // Collection of $count random values
LevelTypes::randomArray(int $count = 1); // Array of $count random values
LevelTypes::randomFirst(); // One random value
While creating admin panel, we always change state of models.
And basically, it is recommended to save all state types in enum.
So in admin panel we need to get all options of enum for select.
That's why we have options()
method.
LevelTypes::options(); // Return collection of selectable options
LevelTypes::optionsToArray(); // Return array of selectable options
Example of options:
Illuminate\Support\Collection {#7777
#items: array:5 [
1 => "Very Easy"
2 => "Easy"
3 => "Medium"
4 => "Strong"
5 => "Very Strong"
]
}
Sometimes in admin panel, it is easier to give options as array of objects.
For such needs we have also selections()
method
LevelTypes::selections();
LevelTypes::selectionsToArray();
Example of selections:
Illuminate\Support\Collection {#7777
#items: array:5 [
0 => [
"value" => "1",
"display" => "Very Easy",
],
1 => [
"value" => "2",
"display" => "Easy",
],
2 => [
"value" => "3",
"display" => "Medium",
],
3 => [
"value" => "4",
"display" => "Strong",
],
4 => [
"value" => "5",
"display" => "Very Strong",
],
]
}
To run test
./vendor/bin/pest