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

v1.0.0 2025-12-27 21:11 UTC

This package is auto-updated.

Last update: 2025-12-27 21:16:25 UTC


README

Tests Lint

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 values
  • names() — Get all enum case names
  • collect() — Get cases as a Laravel Collection
  • getLabel() — Get translated label for a case
  • toSelectList() — Generate key-value pairs for dropdowns
  • wrap() — Safely convert raw values to enum instances
  • is() — Check equality with another value
  • isNot() — Check inequality with another value
  • isIn() — Check if value is in a collection
  • isNotIn() — 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