在使用 Filament 开发后台管理系统时,当创建一个资源时,默认会在创建页面或弹出层中显示两个按钮:
-
Create
(创建) -
Create & Create Another
(创建并创建另一个)
有时可能只需要一个简单的创建按钮,不需要 "创建并创建另一个" 这个功能。
本文将介绍如何在不同场景下禁用这个额外的创建操作。
全局禁用
全局禁用可以通过两种方式实现:
- 使用
disableCreateAnother()
方法 - 使用
hidden()
方法隐藏
选择其中一种即可。
use Filament\Resources\Pages\CreateRecord;
use Filament\Actions\Action;
# 选择下面的一种方法即可
## 1. 使用 `disableCreateAnother()` 方法
CreateRecord::disableCreateAnother();
## 2. 使用 `hidden()` 方法隐藏
Action::configureUsing(function (Action $action) {
$action->hidden($action->getName() === 'createAnother');
});
在弹出层中禁用
使用 createAnother()
方法可以在弹出层中禁用。
use Filament\Actions\CreateAction;
# 使用 `createAnother()` 方法禁用
CreateAction::configureUsing(function (CreateAction $action): void {
$action->createAnother(false);
});
特定页面禁用
相比全局禁用,特定页面禁用更加灵活,可以针对某个页面进行禁用。
重写 canCreateAnother()
方法,返回 false
即可禁用。
use Filament\Resources\Pages\CreateRecord;
class CreatePost extends CreateRecord
{
public static function canCreateAnother(): bool
{
return false;
}
}
在弹出层中禁用
在弹出层 CreateAction 中,可以通过 createAnother(false)
方法禁用。
use Filament\Resources\Pages\ListRecords;
use Filament\Actions\CreateAction;
class ListPosts extends ListRecords
{
protected function getHeaderActions(): array
{
return [
CreateAction::make()
->createAnother(false) // 禁用 Create Another
->modalWidth('lg'), // 可选:设置弹出层宽度
];
}
}
注意事项
- 全局禁用会影响所有资源的创建操作
- 在特定页面禁用只会影响该页面
- 弹出层中的禁用需要在每个弹出层操作中单独设置
- 关联表单中的禁用仅影响特定的关联创建操作