oskarstark/enum-helper
Helpers for PHP 8.1+ enums: compare enum cases (equals, notEquals, equalsOneOf) and convert enums to arrays (backed and non-backed). Includes an abstract EnumTestCase to simplify testing enum behavior.
Pros:
use Comparable, use ToArray).equals(), toArray(), etc.) that reduce boilerplate.EnumTestCase) simplifies unit testing for enums, which is valuable for Laravel’s test-driven workflows.Illuminate\Database\Eloquent\Casts\Attribute enums).Cons:
Spatie/enum or Laravel\Enum).High:
composer require oskarstark/enum-helper).equalsOneOf() autocompletion).Potential Conflicts:
Comparable or ToArray as trait/class names, rename the imported traits (e.g., use OskarStark\Enum\Trait\EnumComparable).#[Test] attributes (PHPUnit 9.5+), which may require minor config updates if your project uses older versions.Low:
equalsOneOf() now accepts arrays instead of ...$items).Mitigations:
EnumTestCase to validate enum behavior before full integration.UserRole) to test traits before rolling out globally.Does Laravel already solve this?
->value and tryFrom(), but lack bulk operations (e.g., equalsOneOf()).Performance impact?
Testing strategy:
EnumTestCase for all enums or use it as a template for custom test classes?use OskarStark\Enum\Test\EnumTestCase;
class UserRoleTest extends EnumTestCase {
protected function enumClass(): string { return UserRole::class; }
}
Future-proofing:
equalsOneOf()/toArray() today; migrate to native enums later if Laravel adds these features.class UserStatus extends Enum).protected $casts = ['status' => UserStatus::class]).ToArray trait simplifies JSON serialization (e.g., return UserStatus::toArray() in API responses).Assessment Phase:
Comparable/ToArray (e.g., UserRole, OrderStatus).enum UserRole: string {
use Comparable, ToArray;
case ADMIN = 'admin';
case USER = 'user';
}
Pilot Integration:
auth).equalsOneOf() in validation logic:
if (request()->user()->role->equalsOneOf([UserRole::ADMIN, UserRole::EDITOR])) {
// Allow action
}
Global Rollout:
vendor/bin/rector process src --dry-run
EnumTestCase:
class UserRoleTest extends EnumTestCase {
protected function enumClass(): string { return UserRole::class; }
}
Deprecation Plan:
equalsOneOf()/toArray().protected $casts = ['status' => OrderStatus::class]).{{ $order->status->value }} or {{ json_encode(OrderStatus::toArray()) }}.ToArray for toArray() methods:
public function toArray($request) {
return [
'status' => $this->resource->status->value,
'status_options' => OrderStatus::toArray(),
];
}
| Phase | Task | Dependencies |
|---|---|---|
| Prep | Update composer.json and run composer update. |
None |
| Pilot | Apply traits to 1–2 enums (e.g., UserRole, OrderStatus). |
oskarstark/enum-helper |
| Testing | Extend EnumTestCase and run tests. |
PHPUnit 9.5+ |
| Rector (Optional) | Auto-apply traits to all enums using Rector. | Rector installed |
| Documentation | Update API docs to reflect enum methods (e.g., equalsOneOf()). |
None |
| Monitor | Track Laravel’s enum improvements for potential migration. | None |
Pros:
isNice() improve code readability.EnumTestCase reduces flakiness in enum-related tests.Cons:
equalsOneOf() throw exceptions for invalid inputs.equalsOneOf()/notEqualsOneOf() scale well for validation (e.g., role checks).ToArray is efficient for API responses (avoids manual case mappings).How can I help you explore Laravel packages today?