公告: 旧版文档请移步 -> http://v2.laravel-filament.cn/docs

Languages

Version

Theme

核心概念

枚举

概述

枚举是一种特殊的 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 接口可以用于从枚举中生成选项数组,枚举值作为数组键,而枚举标签作为数组值。这适用于表单构造器中的 SelectCheckboxList,以及表格构造器中的 SelectColumnSelectFilter

use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Radio;
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)
 
Radio::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 模型中强制转换成枚举。Filament 将会自动使用 HasLabel 接口展示枚举的标签,而采用非其原始值。

在表格中使用枚举标签作为分组标题

如果你在表格构造器中使用分组,且其在 Eloquent 模型中强制转换成了枚举。Filament 将会自动使用 HasLabel 接口展示枚举的标签,而采用非其原始值。这些标签会被展示成每个分组的标题

在信息列表文本条目中使用枚举标签

如果你在信息列表中使用了 TextEntry,且其在 Eloquent 模型中强制转换成枚举。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 模型中强制转换成枚举。Filament 将会自动使用 HasColor 接口以其颜色展示枚举标签。如果该列使用 badge() 方法则效果最佳。

在信息列表文本条目(TextEntry)中使用枚举颜色

如果你在信息列表中使用了 TextEntry,且其在 Eloquent 模型中强制转换成枚举。Filament 将会自动使用 HasColor 接口按对应的颜色展示枚举标签。如果该列使用 badge() 方法则效果最佳。

在表单切换按钮组(ToggleButtons)中使用枚举颜色

如果你在表单构造器中使用 ToggleButtons,并且使用枚举匹配选项,Filament 会自动使用 HasColor 接口,以按其颜色展示枚举标签。

枚举图标

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 模型中强制转换成枚举。Filament 将会自动使用 HasIcon 接口在枚举标签旁展示枚举图标。如果该列使用 badge() 方法则效果最佳。

在信息列表文本栏中使用枚举图标

如果你在信息列表中使用了 TextEntry,且其在 Eloquent 模型中强制转换成枚举。Filament 将会自动使用 HasIcon 接口在枚举标签旁边展示枚举图标。如果该列使用 badge() 方法则效果最佳。

表单切换按钮组(ToggleButtons)中使用枚举图标

如果你在表单构造器中使用 ToggleButtons,并且使用枚举匹配选项,Filament 会自动使用 HasIcon 接口,以在其标签旁展示图标。

枚举描述

HasDescription 接口将枚举实例转换成文本化描述,通常在其标签下展示。这对于在 UI 中展示对人类友好的描述非常有用。

use Filament\Support\Contracts\HasDescription;
use Filament\Support\Contracts\HasLabel;
 
enum Status: string implements HasLabel, HasDescription
{
case Draft = 'draft';
case Reviewing = 'reviewing';
case Published = 'published';
case Rejected = 'rejected';
public function getLabel(): ?string
{
return $this->name;
}
public function getDescription(): ?string
{
return match ($this) {
self::Draft => 'This has not finished being written yet.',
self::Reviewing => 'This is ready for a staff member to read.',
self::Published => 'This has been approved by a staff member and is public on the website.',
self::Rejected => 'A staff member has decided this is not appropriate for the website.',
};
}
}

在表单字段描述中使用枚举描述

HasDescription 接口可用于从枚举中生成描述数组,其中枚举值为键、枚举描述是值。这适用于表单构造器字段如 RadioCheckboxList:

use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Radio;
 
Radio::make('status')
->options(Status::class)
 
CheckboxList::make('status')
->options(Status::class)
Edit on GitHub

Still need help? Join our Discord community or open a GitHub discussion

下一页
贡献