timezhero / enhanced-enums
Enhanced enums for Laravel
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/timezhero/enhanced-enums
Requires
- php: ^8.5
- laravel/framework: ^12.0
Requires (Dev)
- laravel/pint: ^1.18
- orchestra/testbench: ^10.0
- pestphp/pest: ^4.0
README
A powerful trait and attribute-based toolkit for supercharging PHP backed enums in Laravel applications.
Requirements
- PHP 8.5+
- Laravel 12.0+
Installation
Install the package via Composer:
composer require timezhero/enhanced-enums
Usage
Add the Enhancement trait to any backed enum to unlock powerful utilities:
<?php namespace App\Enums; use TimeZHero\EnhancedEnums\Enums\Traits\Enhancement; enum OrderStatus: string { use Enhancement; case Pending = 'pending'; case Processing = 'processing'; case Shipped = 'shipped'; case Delivered = 'delivered'; case Cancelled = 'cancelled'; }
Available Methods
values()— Get all enum valuesnames()— Get all enum case namescollect()— Get cases as a Laravel CollectiongetLabel()— Get translated label for a casetoSelectList()— Generate key-value pairs for dropdownswrap()— Safely convert raw values to enum instancesis()— Check equality with another valueisNot()— Check inequality with another valueisIn()— Check if value is in a collectionisNotIn()— Check if value is not in a collection
values()
Get all enum values as an array:
OrderStatus::values(); // ['pending', 'processing', 'shipped', 'delivered', 'cancelled']
names()
Get all enum case names as an array:
OrderStatus::names(); // ['Pending', 'Processing', 'Shipped', 'Delivered', 'Cancelled']
collect()
Get all enum cases as a Laravel Collection:
OrderStatus::collect(); // Illuminate\Support\Collection containing all OrderStatus cases
Use the #[CollectedBy] attribute to specify a custom collection class:
<?php namespace App\Enums; use App\Collections\StatusCollection; use TimeZHero\EnhancedEnums\Enums\Attributes\CollectedBy; use TimeZHero\EnhancedEnums\Enums\Traits\Enhancement; #[CollectedBy(StatusCollection::class)] enum OrderStatus: string { use Enhancement; case Pending = 'pending'; case Processing = 'processing'; // ... }
OrderStatus::collect(); // Returns StatusCollection instance
getLabel()
Get a translated label for the enum case. Supports two translation strategies.
Key-Based Strategy (Default)
Translations are looked up at enums.{snake_case_class}.{value}:
// In resources/lang/en/enums.php return [ 'order_status' => [ 'pending' => 'Awaiting Confirmation', 'processing' => 'Being Processed', 'shipped' => 'On Its Way', 'delivered' => 'Delivered', 'cancelled' => 'Cancelled', ], ];
OrderStatus::Pending->getLabel(); // "Awaiting Confirmation"
JSON Strategy
Use the #[TranslationStrategy] attribute to switch to JSON translations:
<?php namespace App\Enums; use TimeZHero\EnhancedEnums\Enums\Attributes\TranslationStrategy; use TimeZHero\EnhancedEnums\Enums\Traits\Enhancement; #[TranslationStrategy('json')] enum PaymentMethod: string { use Enhancement; case CreditCard = 'Credit Card'; case BankTransfer = 'Bank Transfer'; case PayPal = 'PayPal'; }
// In resources/lang/it.json { "Credit Card": "Carta di Credito", "Bank Transfer": "Bonifico Bancario" }
PaymentMethod::CreditCard->getLabel(); // "Carta di Credito" (when locale is 'it')
toSelectList()
Generate key-value pairs perfect for HTML dropdowns and form selects:
OrderStatus::toSelectList(); // Collection: ['pending' => 'Pending', 'processing' => 'Processing', ...]
wrap()
Convert raw values to enum instances safely:
OrderStatus::wrap('pending'); // OrderStatus::Pending OrderStatus::wrap(OrderStatus::Pending); // OrderStatus::Pending (unchanged) OrderStatus::wrap('invalid'); // null OrderStatus::wrap(null); // null
is()
Check equality with another enum case or raw value:
$status = OrderStatus::Pending; $status->is(OrderStatus::Pending); // true $status->is('pending'); // true $status->is(OrderStatus::Shipped); // false
isNot()
Check inequality with another enum case or raw value:
$status = OrderStatus::Pending; $status->isNot(OrderStatus::Shipped); // true $status->isNot('pending'); // false
isIn()
Check if the value is in a collection of cases or raw values:
$status = OrderStatus::Pending; $status->isIn([OrderStatus::Pending, OrderStatus::Processing]); // true $status->isIn(['shipped', 'delivered']); // false
isNotIn()
Check if the value is not in a collection of cases or raw values:
$status = OrderStatus::Pending; $status->isNotIn(['shipped', 'delivered']); // true $status->isNotIn([OrderStatus::Pending, OrderStatus::Processing]); // false
Testing
composer test
Code Style
This package uses Laravel Pint for code styling.
# Fix code style composer lint # Check code style without fixing composer lint-check
License
MIT