PHPackages                             bogordesaincom/laravel-enum-simple - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. bogordesaincom/laravel-enum-simple

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

bogordesaincom/laravel-enum-simple
==================================

Elegant Enum implementation for Laravel. With make:enum command, ability to casting for Eloquent models and labels translations via lang files. Forked from

v3.2(1y ago)01.3kMITPHPPHP ^7.3 || ^8.0 || ^8.1 || ^8.2 || ^8.3

Since May 31Pushed 1y ago1 watchersCompare

[ Source](https://github.com/bogordesaincom/laravel-enum-simple)[ Packagist](https://packagist.org/packages/bogordesaincom/laravel-enum-simple)[ Docs](https://github.com/bogordesaincom/laravel-enum-simple)[ RSS](/packages/bogordesaincom-laravel-enum-simple/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (1)Dependencies (7)Versions (9)Used By (0)

[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct-single.svg)](https://stand-with-ukraine.pp.ua)

Elegant Enum implementation for Laravel
=======================================

[](#elegant-enum-implementation-for-laravel)

[![Latest Version on Packagist](https://camo.githubusercontent.com/50d17e4564d3b6e92e10ecb5be28c537b258a6bd2e90c8dde80511af7edbfbe8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d61642d7765622f6c61726176656c2d656e756d2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mad-web/laravel-enum)[![Software License](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Build Status](https://github.com/mad-web/laravel-enum/workflows/tests/badge.svg)](https://github.com/mad-web/laravel-enum/actions)[![StyleCI](https://camo.githubusercontent.com/626520cb30686f7fb2cf91090b04ffa2ffb001a4c33763d092b69557a98b7637/68747470733a2f2f7374796c6563692e696f2f7265706f732f3133383439373934382f736869656c64)](https://styleci.io/repos/138497948)[![Coverage Status](https://camo.githubusercontent.com/ae0971768fd6921afe45f5373f93cf0c0e945e3e363593a3e7a0e3ff39cf52ba/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f636f7665726167652f672f6d61642d7765622f6c61726176656c2d656e756d2e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/mad-web/laravel-enum/code-structure)[![Quality Score](https://camo.githubusercontent.com/a9bcdf7ec1e06a49b2b7cf04e5db1f95f77de1c04aa4bf3dacf443ce91cddbae/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6d61642d7765622f6c61726176656c2d656e756d2e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/mad-web/laravel-enum)[![Total Downloads](https://camo.githubusercontent.com/403b35b118bd4772962e5d466fa2d6cf9cba01c2a1b61eeec0d41457b5403c5d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d61642d7765622f6c61726176656c2d656e756d2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mad-web/laravel-enum)

Fork From [Mad Web Laravel Enum](https://github.com/mad-web/laravel-enum)

Based on [MyCLabs PHP Enum](https://github.com/myclabs/php-enum) and implements [SplEnum](http://php.net/manual/ru/class.splenum.php) interface.

You could find documentation for base features in [PHP Enum Readme](https://github.com/myclabs/php-enum/blob/master/README.md).

Features:

- `make:enum` command
- ability to cast enum fields for Eloquent models
- labels translation via lang files
- simple validation rule

Simple Enum Example
-------------------

[](#simple-enum-example)

```
namespace App\Enums;

use Bogordesain\Enum\Enum;

/**
 * @method static PostStatusEnum FOO()
 * @method static PostStatusEnum BAR()
 * @method static PostStatusEnum BAZ()
 */
final class PostStatusEnum extends Enum
{
    const __default = self::PENDING;

    const PUBLISHED = 'published';
    const PENDING = 'pending';
    const DRAFT = 'draft';
}
```

Installation
------------

[](#installation)

For **Laravel &lt; 7** version - use [1.0 branch](https://github.com/mad-web/laravel-enum/tree/1.0).

You can install the package via composer:

```
composer require mad-web/laravel-enum
```

Usage
-----

[](#usage)

Make new Enum class via artisan command:

```
php artisan make:enum PostStatusEnum
```

to populate Enum with your own values, pass it after `name` argument:

```
php artisan make:enum PostStatusEnum DRAFT=draft PENDING=pending PUBLISHED=published
```

Create instance of Enum class

```
$status = new PostStatusEnum(PostStatusEnum::PENDING);

// or just use magic static method
$status = PostStatusEnum::PENDING();
```

Enums support native [Custom Casts](https://laravel.com/docs/7.x/eloquent-mutators#custom-casts) feature out of the box. Specify Enum class for attribute in `$casts` array:

```
class Post extends Model
{
    protected $fillable = ['title', 'status'];

    protected $casts = [
        'status' => PostStatusEnum::class,
    ];
}
```

after that you could get and set enum field using enum classes

```
$post = Post::first();

$status = $post->status; // PostStatusEnum

$post->status = PostStatusEnum::PENDING();

$post->save();
```

### Enum values labels (Localization)

[](#enum-values-labels-localization)

Create `enums.php` lang file and declare labels for enum values

```
// resources/lang/en/enums.php

return [
    PostStatusEnum::class => [
        PostStatusEnum::PENDING => 'Pending Label',
        PostStatusEnum::PUBLISHED => 'Published Label',
        PostStatusEnum::DRAFT => 'Draft Label',
    ],
];
```

and get a label

```
PostStatusEnum::PENDING()->label(); // Pending Label
```

---

To override default enum lang file path, publish `laravel-enum` config

```
php artisan vendor:publish --provider=MadWeb\\Enum\\EnumServiceProvider
```

and change `lang_file_path` option

```
// config/enum.php

return [
    'lang_file_path' => 'custom.path.to.enums',
];
```

### Validation Rule

[](#validation-rule)

You may validate an enum value from a request by using the `EnumRule` class or `Enum::rule()` method.

```
public function store(Request $request)
{
    $this->validate($request, [
        'status' => ['required', new EnumRule(PostStatusEnum::class)],
    ]);

    // OR

    $this->validate($request, [
        'status' => ['required', PostStatusEnum::rule()],
    ]);
}
```

If you want to validate an enum key instead of an enum value you can by specifying you want to validate against the key instead of the value.

```
public function store(Request $request)
{
    $this->validate($request, [
        'status' => ['required', new EnumRule(PostStatusEnum::class, true)],
    ]);

    // OR

    $this->validate($request, [
        'status' => ['required', PostStatusEnum::ruleByKey()],
    ]);
}
```

---

To customize validation message, add `enum` key to validation lang file

```
// resources/lang/en/validation.php
return [
    //...
    'enum' => 'Custom validation message form enum attribute :attribute',
];
```

Additional methods
------------------

[](#additional-methods)

### getRandomKey(): string

[](#getrandomkey-string)

Returns a random key from the enum.

```
PostStatusEnum::getRandomKey(); // Returns 'PUBLISHED` or `PENDING` or `DRAFT`
```

### getRandomValue()

[](#getrandomvalue)

Returns a random value from the enum.

```
PostStatusEnum::getRandomValue(); // Returns 'published` or `pending` or `draft`
```

### label(): string

[](#label-string)

Returns label for the enum value object

```
PostStatusEnum::PUBLISHED()->label(); // Returns 'published` or custom label declared in a lang file
```

### labels(): array

[](#labels-array)

Returns all labels for a enum

```
PostStatusEnum::labels(); // Returns ['published`, 'pending', 'draft'] or array of custom labels declared in a lang file
```

### is($value): bool

[](#isvalue-bool)

Checks whether the current enum value is equal to a given enum

```
$status = PostStatusEnum::PENDING();

PostStatusEnum::PUBLISHED()->is($status); // false

PostStatusEnum::PENDING()->is($status); // true

// or

PostStatusEnum::PUBLISHED()->is($status->getValue()); // false

PostStatusEnum::PENDING()->is($status->getValue()); // true

// or check one of multiple values

$status->is([PostStatusEnum::DRAFT(), PostStatusEnum::PUBLISHED()]) // false

$status->is([PostStatusEnum::DRAFT(), PostStatusEnum::PENDING()]) // true
```

### rule(): EnumRule

[](#rule-enumrule)

Returns instance of validation rule class for the Enum

```
PostStatusEnum::rule(); // new EnumRule(PostStatusEnum::class);
```

### getConstList(bool $include\_default = false): array

[](#getconstlistbool-include_default--false-array)

Returns all consts (possible values) as an array according to [SplEnum::getConstList](http://php.net/manual/en/splenum.getconstlist.php)

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Testing
-------

[](#testing)

```
composer test
```

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) and [CODE\_OF\_CONDUCT](CODE_OF_CONDUCT.md) for details.

Security
--------

[](#security)

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

Credits
-------

[](#credits)

- [Mad Web](https://github.com/mad-web)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance42

Moderate activity, may be stable

Popularity14

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~94 days

Total

8

Last Release

462d ago

Major Versions

v1.0 → v3.0.02024-01-26

v2.0 → v3.0.1.x-dev2024-03-02

PHP version history (2 changes)v1.0PHP ^7.3 || ^8.0

v3.0.1.x-devPHP ^7.3 || ^8.0 || ^8.1 || ^8.2 || ^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/f601d7f75bdf1e140aca794409ebe70b690616612f39d8bf4471b00383d33631?d=identicon)[bogordesain](/maintainers/bogordesain)

---

Top Contributors

[![bogordesaincom](https://avatars.githubusercontent.com/u/51335197?v=4)](https://github.com/bogordesaincom "bogordesaincom (12 commits)")

---

Tags

enumlaravel-enumbogordesaincom

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/bogordesaincom-laravel-enum-simple/health.svg)

```
[![Health](https://phpackages.com/badges/bogordesaincom-laravel-enum-simple/health.svg)](https://phpackages.com/packages/bogordesaincom-laravel-enum-simple)
```

###  Alternatives

[spatie/laravel-enum

Laravel Enum support

3655.7M34](/packages/spatie-laravel-enum)[laravel/ai

The official AI SDK for Laravel.

9782.1M161](/packages/laravel-ai)[spatie/laravel-export

Create a static site bundle from a Laravel app

672139.5k6](/packages/spatie-laravel-export)[tallstackui/tallstackui

TallStackUI is a powerful suite of Blade components that elevate your workflow of Livewire applications.

721160.4k12](/packages/tallstackui-tallstackui)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[mad-web/laravel-enum

Elegant Enum implementation for Laravel. With make:enum command, ability to casting for Eloquent models and labels translations via lang files.

110136.0k](/packages/mad-web-laravel-enum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
