Nova field for enums in PHP 8.1 and above (both pure Enum
and BackedEnum
) with datomatic/enum-helper and datomatic/laravel-enum-helper compatibility.
There is also a Nova Select filter and Nova Boolean filter:
You can install this package in a Laravel app that uses Nova via composer:
composer require datomatic/nova-enum-field
use App\Enums\UserType;
use Illuminate\Database\Eloquent\Model;
class Example extends Model
{
protected $casts = [
'user_type' => UserType::class,
];
}
You can use the Enum
field in your Nova resource like this:
namespace App\Nova;
use App\Enums\UserType;
use Datomatic\Nova\Fields\Enum\Enum;
class Example extends Resource
{
// ...
public function fields(Request $request)
{
return [
// ...
Enum::make('User Type','user_type')->attach(UserType::class),
// ...
];
}
}
Be aware that order in which methods on the field are called can be sigificant. For example nullable()
must be called before before attach()
, and options()
must be called after attach()
.
If you use datomatic/laravel-enum-helper you can set optionally a custom dynamic property or/and a subset of cases.
The default property is description
.
Enum::make('User Type','user_type')
->nullable()
->property('excerpt')
->cases([UserType::ADMINISTRATOR,UserType::MODERATOR])
->attach(UserType::class),
If you would like to use the provided Nova Select filter, you can include it like this:
namespace App\Nova;
use App\Enums\UserPermissions;
use App\Enums\UserType;
use Datomatic\Nova\Fields\Enum\EnumFilter;
class Example extends Resource
{
// ...
public function filters(Request $request)
{
return [
EnumFilter::make('user_type', UserType::class),
// With optional name and default value:
EnumFilter::make('user_type', UserType::class)
->name(__('User Type'))
->default(UserType::ADMINISTRATOR)
];
}
}
Alternatively, you may wish to use the provided Nova Boolean filter:
namespace App\Nova;
use App\Enums\UserPermissions;
use App\Enums\UserType;
use Datomatic\Nova\Fields\Enum\EnumBooleanFilter;
class Example extends Resource
{
// ...
public function filters(Request $request)
{
return [
EnumBooleanFilter::make('user_type', UserType::class),
// With optional name and default value:
EnumBooleanFilter::make('user_type', UserType::class)
->name(__('User Type'))
->default([UserType::ADMINISTRATOR, UserType::MODERATOR])
];
}
}
If you use datomatic/laravel-enum-helper you can set optionally a custom dynamic property or/and a subset of cases.
The default property is description
.
// Enum filter
EnumFilter::make('user_type', UserType::class)
->name('User Type')
->property('excerpt')
->cases([UserType::ADMINISTRATOR,UserType::MODERATOR])
// Boolean Enum filter
EnumBooleanFilter::make('user_type', UserType::class)
->name('User Type')
->property('excerpt')
->cases([UserType::ADMINISTRATOR,UserType::MODERATOR])
The MIT License (MIT). Please see License File for more information.