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

Languages

Version

Theme

Actions

概述

Action 是什么?

"Action" 是 Laravel 社区使用较多的一个词。传统上,PHP 动作类在应用业务逻辑中处理"执行"动作。比如,登录一个用户、发送邮件或者在数据库中创建新用户记录。

在 Filament 中,Action 也在应用中处理"执行"动作。不过,与传统的 Action 有些不同。它被设计用于用户界面的上下文中。比如,你可能有一个按钮用来删除客户记录,它会打开模态框让你确认删除。当用户点击模态框中的“删除”按钮后,客户就被删除了。这一整个工作流程就是一个 "Action"。

Action::make('delete')
->requiresConfirmation()
->action(fn () => $this->client->delete())

Action 也能从用户那边收集额外信息。比如,你可以有一个按钮去发送邮件给客户。当用户点击按钮时,打开模态框去收集邮件标题和内容。当用户点击模态框中的“发送”按钮后,就会发送邮件:

use Filament\Forms\Components\RichEditor;
use Filament\Forms\Components\TextInput;
use Illuminate\Support\Facades\Mail;
 
Action::make('sendEmail')
->form([
TextInput::make('subject')->required(),
RichEditor::make('body')->required(),
])
->action(function (array $data) {
Mail::to($this->client)
->send(new GenericEmail(
subject: $data['subject'],
body: $data['body'],
));
})

通常,Action 的执行不会让用户重定向离开当前页面。这是因为我们广泛使用了 Livewire。不过,Action 也可以更简单,甚至不需要模态框。你可以传递一个 URL 给 Action,当用户点击按钮时,他们就会重定向到那个页面:

Action::make('edit')
->url(fn (): string => route('posts.edit', ['post' => $this->post]))

Action 触发按钮和模态框的整体外观可以使用 Fluent PHP 方法自定义。我们为 UI 提供了一个合理且一致的样式,不过所有这些都可以使用 CSS 自定义。

Action 类型

Action 概念用在整个 Filament 的许多上下文中。有些情景不支持从 Action 中打开模态框 - 他们只打开 URL、调用公共 Livewire 方法,或者发送 Livewire 事件。另外,不同上下文中使用不同的 PHP Action 类,因为它们提供给开发者适合该用例的上下文感知数据。

自定义 Livewire 组件 Action

你可以在应用内将 Action 到任何 Livewire 组件中,甚至可以添加到面板中的页面。

这些 Action 使用 Filament\Actions\Action 类。他们可以根据你的选择,打开模态框或者甚至只是打开 URL。

如果你需要添加 Action 到 Livewire 组件,请在文档中访问该页面。如果,你想在面板的页面头部中添加 Action,请查阅此页面

表格 Action

Filament 表格也使用 Action。Action 可以添加到表格的行尾,或者甚至表格的头部。比如,你可能希望在表格头部添加一个"新建"记录的 Action,然后在每行中添加"编辑"和"删除"动作。另外,Action 可以添加到表格的任何列中,这样那一列的每个单元格都是动作的触发器。

这些 Action 使用 Filament\Tables\Actions\Action 类。他们可以根据你的选择,打开模态框或者甚至只是打开 URL。

如果你想要在应用中将 Action 添加到表格中,在文档中查看此页面

表格批量操作

表格也支持"批量操作(Bulk Action)"。当用户在表中选择多行时,可以使用这一功能。传统上,当选择行时,"批量操作"按钮会出现在表的左上角。当用户单击此按钮时,会向他们显示一个下拉菜单,其中包含可供选择的操作。批量操作也可以添加到表格的头部中,与其他头部操作相邻。在这种情况下,批量操作触发器按钮将被禁用,直到用户选择表行。

这些 Action 使用 Filament\Tables\Actions\BulkAction 类。他们可以根据你的选择,打开模态框。

如果你要在应用中添加批量动作到表格中,请查看文档中的此页

表单组件 Action

表单组件可以包含 Action。表单组件内部 Action 的一个很好用例是,使用一个 Select 字段和一个"创建"新记录的操作按钮。当单击按钮时,会打开一个模态来收集新记录的数据。当模态表单提交时,将在数据库中创建新记录,并用新创建的记录填充 Select 字段。幸运的是,这种情况是开箱即用地处理,不过这是一个说明表单组件的 Action 如何强大的好例子。

这些 Action 使用 Filament\Forms\Components\Actions\Actio 类。它们可以打开模态框或者 URL。

如果你要在应用中将 Action 添加到表单组件中。请查阅文档中的此页

信息列表组件 Action

信息列表组件可以包含 Action。这些 Action 使用 Filament\Infolists\Components\Actions\Action 类。它们可以打开模态框或者 URL。

如果你要在应用中将 Action 添加到信息列表组件中。请查阅文档中的此页

通知生成器 Action

当你发送通知,你也可以添加 Action。这些按钮在通知内容的下方渲染。比如,一个提醒用户有新信息的通知,应该包含一个打开对话主题的 Action 按钮。

这些 Action 使用 Filament\GlobalSearch\Actions\Action 类。它们不能打开模态框,但是可以打开 URL 或者派发 Livewire 事件。

如果你要在应用中将 Action 添加到通知中。请查阅文档中的此页

全局搜索结果 Action

在后台面板中,有一个全局搜索字段,让你可以在应用的一个地方中搜索所有的资源。不过,你可以在每个全局搜索结果下面添加其他的 Action。比如,你可能想要"编辑"和"查看"客户端搜索结果,这样用户就可以迅速编辑他们的简介以及以只读模式查看记录。

这些 Action 使用 Filament\GlobalSearch\Actions\Action 类。它们不能打开模态框,但是可以打开 URL 或者派发 Livewire 事件。

如果你要在面板中将 Action 添加到全局搜索结果中。请查阅文档中的此页

预制 Action

Filament 包含了多个预制 Action,你可以将这些操作添加到你的应用中。他们的目的是简化最常见的与 Eloquent 相关的行为:

Action 分组

你可以使用 ActionGroup 对象,将 Action 分组到一个下拉菜单中。分组可以包含多个 Action 或者其他分组:

ActionGroup::make([
Action::make('view'),
Action::make('edit'),
Action::make('delete'),
])

了解更多如何对 Action 进行分组,请查看Action 分组页面。

Edit on GitHub

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

上一页
安装