simplesquid / nova-enum-field
A Laravel Nova field to add enums to resources.
Installs: 284 755
Dependents: 2
Suggesters: 0
Security: 0
Stars: 52
Watchers: 4
Forks: 26
Open Issues: 0
Requires
- php: ^8.1
- bensampo/laravel-enum: ^5.0 || ^6.0
- illuminate/support: ^10.0 || ^11.0
- laravel/nova: ^4.0
Requires (Dev)
- ergebnis/composer-normalize: ^2.44
- laravel/pint: ^1.2
- mockery/mockery: ^1.3.3
- nunomaduro/collision: ^7.0 || ^8.0
- orchestra/testbench: ^8.0 || ^9.0
- phpunit/phpunit: ^10.1
- quotevelocity/novaunit: ^4.0
- symfony/var-dumper: ^6.0 || ^7.0
README
Laravel Nova field to add enums to resources. This field uses the BenSampo/laravel-enum package, so make sure to check out the installation instructions there first.
Installation
You can install this package in a Laravel app that uses Nova via composer:
composer require simplesquid/nova-enum-field
Setup
It is strongly recommended that you use Attribute Casting in your models. From the docs at BenSampo/laravel-enum, this can be done like this:
use App\Enums\UserType; use Illuminate\Database\Eloquent\Model; class Example extends Model { protected $casts = [ 'user_type' => UserType::class, ]; }
Usage
You can use the Enum
field in your Nova resource like this:
namespace App\Nova; use App\Enums\UserType; use SimpleSquid\Nova\Fields\Enum\Enum; class Example extends Resource { // ... public function fields(Request $request) { return [ // ... Enum::make('User Type')->attach(UserType::class), // ... ]; } }
Flagged Enums
You can use the FlaggedEnum
field in your Nova resource like this (see Flagged/Bitwise Enum setup):
namespace App\Nova; use App\Enums\UserPermissions; use SimpleSquid\Nova\Fields\Enum\FlaggedEnum; class Example extends Resource { // ... public function fields(Request $request) { return [ // ... FlaggedEnum::make('User Permissions')->attach(UserPermissions::class), // ... ]; } }
Filters
If you would like to use the provided Nova Select filter (which is compatible with both the Enum
and FlaggedEnum
fields), you can include it like this:
namespace App\Nova; use App\Enums\UserPermissions; use App\Enums\UserType; use SimpleSquid\Nova\Fields\Enum\EnumFilter; class Example extends Resource { // ... public function filters(Request $request) { return [ new EnumFilter('user_type', UserType::class), new EnumFilter('user_permissions', UserPermissions::class), // With optional filter name: (new EnumFilter('user_type', UserType::class)) ->name('Type of user'), // With optional default value: (new EnumFilter('user_type', UserType::class)) ->default(UserType::Administrator), ]; } }
Alternatively, you may wish to use the provided Nova Boolean filter (which is also compatible with both the Enum
and FlaggedEnum
fields):
namespace App\Nova; use App\Enums\UserPermissions; use App\Enums\UserType; use SimpleSquid\Nova\Fields\Enum\EnumBooleanFilter; class Example extends Resource { // ... public function filters(Request $request) { return [ new EnumBooleanFilter('user_type', UserType::class), new EnumBooleanFilter('user_permissions', UserPermissions::class), // With optional filter name: (new EnumBooleanFilter('user_type', UserType::class)) ->name('Type of user'), // With optional default values: (new EnumBooleanFilter('user_type', UserType::class)) ->default([ UserType::Administrator, UserType::Moderator, ]), // When filtering a FlaggedEnum, it will default to filtering // by ANY flags, however you may wish to filter by ALL flags: (new EnumBooleanFilter('user_permissions', UserPermissions::class)) ->filterAllFlags(), ]; } }
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
Package skeleton based on spatie/skeleton-php.
About us
SimpleSquid is a small web development and design company based in Valkenburg, Netherlands.
License
The MIT License (MIT). Please see License File for more information.