枚举
概述
枚举是一种特殊的 PHP 类,用来表示一组固定的常数组。它用于将一些有限数量的可能值的概念模型化,比如星期几、月份或者纸牌的花色。
由于枚举中的 case 是枚举类的实例,在枚举中添加接口会很有用。Filament 提供了一些你可以添加到枚举的接口,用来提升使用枚举时的体验。
当在 Eloquent 模型的属性中使用 Enum,请确保它强制转换正确。
枚举标签
HasLabel
接口将枚举实例转换成文本标签。这对于在 UI 中展示可读的枚举值很有用。
use Filament\Support\Contracts\HasLabel;
enum Status: string implements HasLabel
{
case Draft = 'draft';
case Reviewing = 'reviewing';
case Published = 'published';
case Rejected = 'rejected';
public function getLabel(): ?string
{
return $this->name;
// or
return match ($this) {
self::Draft => 'Draft',
self::Reviewing => 'Reviewing',
self::Published => 'Published',
self::Rejected => 'Rejected',
};
}
}
在表单字段选项中使用枚举标签
HasLabel
接口可以用于从枚举中生成选项数组,枚举值作为数组键,而枚举标签作为数组值。这适用于表单构造器中的 Select
及 CheckboxList
,以及表格构造器中的 SelectColumn
和 SelectFilter
:
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Select;
use Filament\Tables\Columns\SelectColumn;
use Filament\Tables\Filters\SelectFilter;
Select::make('status')
->options(Status::class)
CheckboxList::make('status')
->options(Status::class)
SelectColumn::make('status')
->options(Status::class)
SelectFilter::make('status')
->options(Status::class)
上例中,Status::class
是实现了 HasLabel
的枚举类,由其生成的选项如下:
[
'draft' => 'Draft',
'reviewing' => 'Reviewing',
'published' => 'Published',
'rejected' => 'Rejected',
]
在表格文本列中使用枚举标签
如果你使用了表格构造器的 TextColumn
,且其在 Eloquent 模型中 cast 成枚举。Filament 将会自动使用 HasLabel
接口展示枚举的标签,而采用非其原始值。
在表格中使用枚举标签作为分组标题
如果你在表格构造器中使用分组,且其在 Eloquent 模型中 cast 成了枚举。Filament 将会自动使用 HasLabel
接口展示枚举的标签,而采用非其原始值。这些标签会被展示成每个分组的标题。
在信息列表文本条目中使用枚举标签
如果你在信息列表中使用了 TextEntry
,且其在 Eloquent 模型中 cast 成枚举。Filament 将会自动使用 HasLabel
接口展示枚举的标签,而采用非其原始值。
枚举颜色
HasColor
接口将枚举实例转换成颜色。这对于在 UI 中展示可读的颜色枚举值很有用。
use Filament\Support\Contracts\HasColor;
enum Status: string implements HasColor
{
case Draft = 'draft';
case Reviewing = 'reviewing';
case Published = 'published';
case Rejected = 'rejected';
public function getColor(): string | array | null
{
return match ($this) {
self::Draft => 'gray',
self::Reviewing => 'warning',
self::Published => 'success',
self::Rejected => 'danger',
};
}
}
在表格文本列中使用枚举颜色
如果你使用了表格构造器的 TextColumn
,且其在 Eloquent 模型中 cast 成枚举。Filament 将会自动使用 HasColor
接口以其颜色展示枚举标签。如果该列使用 badge()
方法则效果最佳。
在信息列表文本栏中使用枚举颜色
如果你在信息列表中使用了 TextEntry
,且其在 Eloquent 模型中 cast 成枚举。Filament 将会自动使用 HasColor
接口按对应的颜色展示枚举标签。如果该列使用 badge()
方法则效果最佳。
枚举图标
HasIcon
接口将枚举实例转换成图标。这对于在 UI 中在枚举值旁边展示图标很有用。
use Filament\Support\Contracts\HasIcon;
enum Status: string implements HasIcon
{
case Draft = 'draft';
case Reviewing = 'reviewing';
case Published = 'published';
case Rejected = 'rejected';
public function getIcon(): ?string
{
return match ($this) {
self::Draft => 'heroicon-m-pencil',
self::Reviewing => 'heroicon-m-eye',
self::Published => 'heroicon-m-check',
self::Rejected => 'heroicon-m-x-mark',
};
}
}
表格文本列中使用枚举图标
如果你使用了表格构造器的 TextColumn
,且其在 Eloquent 模型中 cast 成枚举。Filament 将会自动使用 HasIcon
接口在枚举标签旁展示枚举图标。如果该列使用 badge()
方法则效果最佳。
在信息列表文本栏中使用枚举图标
如果你在信息列表中使用了 TextEntry
,且其在 Eloquent 模型中 cast 成枚举。Filament 将会自动使用 HasIcon
接口在枚举标签旁边展示枚举图标。如果该列使用 badge()
方法则效果最佳。