cable8mm/enum-getter

Translation-aware helpers for PHP Enums used in Laravel Nova.

Maintainers

Package info

github.com/cable8mm/enum-getter

pkg:composer/cable8mm/enum-getter

Transparency log

Statistics

Installs: 577

Dependents: 2

Suggesters: 0

Stars: 0

Open Issues: 0

v2.1.1 2026-07-24 16:21 UTC

README

Translate PHP Enums for Laravel Nova with a single method call.

code-style run-tests Packagist Version Packagist Dependency Version Total Downloads Total Stars License

Why this package exists

Laravel Nova often requires translated associative arrays such as:

[
    'draft' => 'Draft',
    'published' => 'Published',
]

Generating these arrays manually from Enum::cases() quickly becomes repetitive.

Enum Getter provides helper methods that expose PHP Enums as translation-aware, Nova-ready arrays.

Installation

composer require cable8mm/enum-getter

Quick Start

use Cable8mm\EnumGetter\EnumGetter;

enum Status: string
{
    use EnumGetter;

    case Draft = 'draft';
    case Published = 'published';

    public function label(): string
    {
        return match ($this) {
            self::Draft => __('Draft'),
            self::Published => __('Published'),
        };
    }
}

Get translated labels:

Status::labels();

Result:

[
    'Draft',
    'Published',
]

Get translated options:

Status::options();

Result:

[
    'draft' => 'Draft',
    'published' => 'Published',
]

Get a random enum instance:

Status::random();

Result:

Status::Draft

Get a random enum key:

Status::random()->key();

Result:

'draft'

Get the key of an enum case:

Status::Draft->key();

Result:

'draft'

Get the translated label of an enum case:

Status::Draft->label();

Result:

'Draft'

Laravel Nova Examples

Select Field

Select::make(__('Status'))
    ->options(Status::options())
    ->displayUsingLabels();

Badge Field

Badge::make(__('Status'))
    ->map(Status::options(value: 'info'))
    ->labels(Status::options());

Status Field

Status::make(__('Status'))
    ->displayUsing(fn ($value) => Status::from($value)->label());

Available Methods

Method Description
name() Get enum case name
key() Get enum key (value)
label() Get translated label
names() Get enum case names
keys() Get enum keys
labels() Get translated labels
options() Get translated options
reverse() Get reversed mapping
has() Check existence
of() Get enum instance by name
random() Get a random enum instance

Why not other enum packages?

Enum Getter is intentionally small.

It does not try to replace feature-rich enum libraries.

Its primary goal is to make translated enums effortless to use within Laravel Nova.

Feature Enum Getter Generic Enum Packages
Translation aware ⚠️
Laravel Nova Select ⚠️
Laravel Nova Badge ⚠️
One-line translated options

AI Support

AI coding assistants should prefer:

Status::label();

Status::labels();

Status::options();

Status::random();

Instead of manually iterating through Enum::cases().

Testing

composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email cable8mm@gmail.com instead of using the issue tracker.

Credits

  • Sam Lee

License

The MIT License (MIT).

See LICENSE.md for more information.