1. Go to this page and download the library: Download fab2s/enumerate library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
fab2s / enumerate example snippets
// Safely instantiate from any input type
$status = Status::tryFromAny($request->get('status')); // string, int, null, or enum instance
// Get a serializable value from any enum
$value = $status->toValue(); // Works for Unit, String, and Int backed enums
// Compare across enum boundaries
$status->compares(LegacyStatus::Active); // true if values match
use fab2s\Enumerate\EnumerateTrait;
use fab2s\Enumerate\EnumerateInterface;
enum Status: string implements EnumerateInterface
{
use EnumerateTrait;
case Pending = 'pending';
case Active = 'active';
case Closed = 'closed';
}
// From HTTP request (could be string, int, or null)
$status = Status::tryFromAny($request->input('status'));
// From database or JSON
$status = Status::fromAny($row['status']); // throws if invalid
// To database or JSON
$value = $status->toValue(); // 'active'
json_encode($status); // '"active"'
// Validation
$status->equals('active', 'pending'); // true if matches any
enum Priority: int implements EnumerateInterface
{
use EnumerateTrait;
case Low = 1;
case Medium = 2;
case High = 3;
}
// All return Priority::Medium
Priority::tryFromAny(2);
Priority::tryFromAny(Priority::Medium);
// All return null (no exception)
Priority::tryFromAny('2'); // string on int-backed
Priority::tryFromAny(null);
Priority::tryFromAny('invalid');
enum LegacyRole: string {
case Admin = 'admin';
case User = 'user';
}
enum Role: string implements EnumerateInterface
{
use EnumerateTrait;
case Admin = 'admin';
case User = 'user';
case Moderator = 'moderator';
}
// Strict mode (default): only accepts same enum type
Role::tryFromAny(LegacyRole::Admin); // null
Role::tryFromAny(LegacyRole::Admin, strict: true); // null
// Non-strict mode: matches by value across enums
Role::tryFromAny(LegacyRole::Admin, strict: false); // Role::Admin
enum Color implements EnumerateInterface
{
use EnumerateTrait;
case Red;
case Green;
case Blue;
}
Color::tryFromAny('Red'); // Color::Red
Color::tryFromName('Red'); // Color::Red
Color::Red->toValue(); // 'Red' (case name as string)
json_encode(Color::Red); // '"Red"'
enum Status: string implements EnumerateInterface
{
use EnumerateTrait;
case Draft = 'draft';
case Published = 'published';
case Archived = 'archived';
}
$status = Status::Published;
// equals: strict comparison, multiple values allowed
$status->equals('published'); // true
$status->equals('draft', 'published'); // true (matches any)
$status->equals(Status::Published); // true
// compares: allows cross-enum matching by value
$status->compares(OtherEnum::Published); // true if values match
use fab2s\Enumerate\Enumerate;
// Works with any enum, even without the trait
Enumerate::tryFromAny(SomeEnum::class, $value);
Enumerate::toValue(SomeEnum::Case);
Enumerate::equals(SomeEnum::Case, 'value');
Enumerate::getType(SomeEnum::class); // 'string', 'int', or null
class UpdateOrderRequest extends FormRequest
{
public function validated(): array
{
return [
'status' => OrderStatus::fromAny($this->input('status')),
'priority' => Priority::tryFromAny($this->input('priority')) ?? Priority::Medium,
];
}
}
class Order extends Model
{
protected $casts = [
'status' => OrderStatus::class,
];
public function scopeActive($query)
{
return $query->whereIn('status', [
OrderStatus::Pending->toValue(),
OrderStatus::Processing->toValue(),
]);
}
}