Filament 允许您在框架视图的各个位置渲染 Blade 内容。这对于插件能够将 HTML 注入到框架中很有用。此外,由于 Filament 不建议发布视图,因为破坏性更改的风险增加,因此这对用户也很有用。
要注册渲染钩子,您可以从服务提供者或中间件中调用 FilamentView::registerRenderHook()。第一个参数是渲染钩子的名称,第二个参数是一个返回要渲染内容的闭包:
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
use Illuminate\Support\Facades\Blade;
FilamentView::registerRenderHook(
PanelsRenderHook::BODY_START,
fn (): string => Blade::render('@livewire(\'livewire-ui-modal\')'),
);你也可以从文件中渲染视图内容:
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
use Illuminate\Contracts\View\View;
FilamentView::registerRenderHook(
PanelsRenderHook::BODY_START,
fn (): View => view('impersonation-banner'),
);use Filament\View\PanelsRenderHook;PanelsRenderHook::AUTH_LOGIN_FORM_AFTER - 登录表单之后PanelsRenderHook::AUTH_LOGIN_FORM_BEFORE - 在登录表单之前PanelsRenderHook::AUTH_PASSWORD_RESET_REQUEST_FORM_AFTER - 密码重置请求表单之后PanelsRenderHook::AUTH_PASSWORD_RESET_REQUEST_FORM_BEFORE - 密码重置请求表单之前PanelsRenderHook::AUTH_PASSWORD_RESET_RESET_FORM_AFTER - 在密码重置表单之后PanelsRenderHook::AUTH_PASSWORD_RESET_RESET_FORM_BEFORE - 在密码重置表单之前PanelsRenderHook::AUTH_REGISTER_FORM_AFTER - 在注册表单之后PanelsRenderHook::AUTH_REGISTER_FORM_BEFORE - 在注册表单之前PanelsRenderHook::BODY_END - 在 </body> 之前PanelsRenderHook::BODY_START - 在 <body> 之后PanelsRenderHook::CONTENT_AFTER - 页面内容之后PanelsRenderHook::CONTENT_BEFORE - 在页面内容之前PanelsRenderHook::CONTENT_END - 在页面内容之后,位于<main>内部PanelsRenderHook::CONTENT_START - 在页面内容之前,在 <main> 内部PanelsRenderHook::FOOTER - 页脚PanelsRenderHook::GLOBAL_SEARCH_AFTER - 在 全局搜索 容器之后,位于顶部栏内部PanelsRenderHook::GLOBAL_SEARCH_BEFORE - 在全局搜索容器之前,顶部栏内部PanelsRenderHook::GLOBAL_SEARCH_END - 全局搜索 容器的结尾PanelsRenderHook::GLOBAL_SEARCH_START - [全局搜索](../resources/global-search) 容器的开头PanelsRenderHook::HEAD_END - 在 </head> 之前PanelsRenderHook::HEAD_START - 在 <head> 之后PanelsRenderHook::LAYOUT_END - 布局容器的末尾,也可以限定作用域到页面类PanelsRenderHook::LAYOUT_START - Start of the layout container, also can be scoped to the page classPanelsRenderHook::PAGE_END - 页面内容容器的末尾,也可以 限定范围 至页面或资源类PanelsRenderHook::PAGE_FOOTER_WIDGETS_AFTER - 在页面页脚小部件之后,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_FOOTER_WIDGETS_BEFORE - 在页面页脚小部件之前,也可以限定作用域到页面或资源类PanelsRenderHook::PAGE_FOOTER_WIDGETS_END - 页脚小部件的末尾,也可以限定作用域到页面或资源类PanelsRenderHook::PAGE_FOOTER_WIDGETS_START - 页面页脚小部件的开始,也 可以被限定范围 到页面或资源类PanelsRenderHook::PAGE_HEADER_ACTIONS_AFTER - 在页面头部操作之后,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_HEADER_ACTIONS_BEFORE - 在页面标题动作之前,也 可以限定于 页面或资源类PanelsRenderHook::PAGE_HEADER_WIDGETS_AFTER - 在页面头部小组件之后,也可以进行作用域限制到页面或资源类PanelsRenderHook::PAGE_HEADER_WIDGETS_BEFORE - 在页面头部小部件之前,也可以进行作用域限定到页面或资源类PanelsRenderHook::PAGE_HEADER_WIDGETS_END - 页眉组件的结束,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_HEADER_WIDGETS_START - 页面头部小组件的开始, 也 可以限定作用域 到页面或资源类PanelsRenderHook::PAGE_START - 页面内容容器的开始,也可以限定作用域到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_END_AFTER - 在页面子导航的“end”侧边栏位置之后,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_END_BEFORE - 在页面子导航“结束”侧边栏位置之前,也可将范围限定到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_SELECT_AFTER - 在页面子导航选择之后 (针对移动端),也 可以限定范围 到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_SELECT_BEFORE - 在页面子导航选择(用于移动端)之前,也可限定作用域到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_SIDEBAR_AFTER - 在页面子导航侧边栏之后,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_SIDEBAR_BEFORE - 在页面子导航侧边栏之前,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_START_AFTER - After the page sub navigation "start" sidebar position, also can be scoped to the page or resource classPanelsRenderHook::PAGE_SUB_NAVIGATION_START_BEFORE - Before the page sub navigation "start" sidebar position, also can be scoped to the page or resource classPanelsRenderHook::PAGE_SUB_NAVIGATION_TOP_AFTER - 在页面子导航“顶部”标签位置之后,也可以限定范围到页面或资源类PanelsRenderHook::PAGE_SUB_NAVIGATION_TOP_BEFORE - 在页面子导航 "顶部" 标签位置之前, 也 可以限定范围 到页面或资源类PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABLE_AFTER - 在资源表之后,也可以限定作用域到页面或资源类PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABLE_BEFORE - 在资源表之前,也 可以进行范围限定 到页面或资源类PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABS_END - 过滤选项卡的末尾(在最后一个选项卡之后),也可按范围限定到页面或资源类PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABS_START - 筛选选项卡的起始位置(在第一个选项卡之前),也可以限定范围到页面或资源类PanelsRenderHook::RESOURCE_PAGES_MANAGE_RELATED_RECORDS_TABLE_AFTER - 关联管理器表之后,也可以限定范围到页面或资源类PanelsRenderHook::RESOURCE_PAGES_MANAGE_RELATED_RECORDS_TABLE_BEFORE - 在关系管理器表之前,也可以限定范围到页面或资源类PanelsRenderHook::RESOURCE_RELATION_MANAGER_AFTER - 在关系管理器表之后,也可以作用域限定到页面或关系管理器类PanelsRenderHook::RESOURCE_RELATION_MANAGER_BEFORE - Before the relation manager table, also can be scoped to the page or relation manager classPanelsRenderHook::RESOURCE_TABS_END - 资源标签页的末尾(在最后一个标签页之后),也可以作用于页面或资源类PanelsRenderHook::RESOURCE_TABS_START - 资源标签页的开始(在第一个标签页之前),也可以限定作用域到页面或资源类PanelsRenderHook::SCRIPTS_AFTER - 脚本定义之后PanelsRenderHook::SCRIPTS_BEFORE - 在脚本定义之前PanelsRenderHook::SIDEBAR_LOGO_AFTER - 在侧边栏的标志之后PanelsRenderHook::SIDEBAR_LOGO_BEFORE - 在侧边栏标志之前面板渲染钩子::侧边栏_导航_结束 - 在 [侧边栏](../navigation) 之前 </nav>PanelsRenderHook::SIDEBAR_NAV_START - 在侧边栏,在<nav>之后PanelsRenderHook::SIMPLE_LAYOUT_END - 简单布局容器的末尾,也可以限定范围到页面类PanelsRenderHook::SIMPLE_LAYOUT_START - 简单布局容器的起始,同时可以限定作用域到页面类PanelsRenderHook::SIMPLE_PAGE_END - 简单页面内容容器的末尾,也可以限定范围到页面类PanelsRenderHook::SIMPLE_PAGE_START - 简单页面内容容器的起始,也可以设定作用域到页面类PanelsRenderHook::SIDEBAR_FOOTER - 固定在侧边栏底部,位于内容下方PanelsRenderHook::STYLES_AFTER - 样式定义之后PanelsRenderHook::STYLES_BEFORE - 在样式定义之前PanelsRenderHook::TENANT_MENU_AFTER - 在 租户菜单 之后PanelsRenderHook::TENANT_MENU_BEFORE - 在 租户菜单 之前PanelsRenderHook::TOPBAR_AFTER - 顶部栏下方PanelsRenderHook::TOPBAR_BEFORE - 在顶部栏上方PanelsRenderHook::TOPBAR_END - 顶部栏容器的结束PanelsRenderHook::TOPBAR_LOGO_AFTER - 在顶栏中的标志之后PanelsRenderHook::TOPBAR_LOGO_BEFORE - 在顶部栏的标志之前PanelsRenderHook::TOPBAR_START - 顶部栏容器的开始PanelsRenderHook::USER_MENU_AFTER - 在 用户菜单 之后PanelsRenderHook::USER_MENU_BEFORE - 在 [用户菜单](../navigation/user-menu) 之前PanelsRenderHook::USER_MENU_PROFILE_AFTER - 在 用户菜单 中的用户资料项之后PanelsRenderHook::USER_MENU_PROFILE_BEFORE - 在用户菜单中的个人资料项之前所有这些渲染钩子 可以限定范围 到任何表格 Livewire 组件类。使用 Panel Builder 时,这些类可能是资源的列表或管理页面,或是关系管理器。表格小部件也是 Livewire 组件类。
use Filament\Tables\View\TablesRenderHook;TablesRenderHook::FILTER_INDICATORS - 替换现有筛选指示器, 接收 filterIndicators 数据作为 array<Filament\Tables\Filters\Indicator>TablesRenderHook::HEADER_CELL - 替换现有的表头单元格,接收 Filament\Tables\Columns\Column 对象作为 column 和 isReordering 在数据中。TablesRenderHook::SELECTION_INDICATOR_ACTIONS_AFTER - 在选择指示器栏中“全选”和“取消全选”操作按钮之后TablesRenderHook::SELECTION_INDICATOR_ACTIONS_BEFORE - 在选择指示器栏中“全选”和“取消全选”操作按钮之前TablesRenderHook::HEADER_AFTER - 头部容器之后TablesRenderHook::HEADER_BEFORE - 在头部容器之前TablesRenderHook::TOOLBAR_AFTER - 在工具栏容器之后TablesRenderHook::TOOLBAR_BEFORE - 在工具栏容器之前TablesRenderHook::TOOLBAR_END - 工具栏的末尾TablesRenderHook::TOOLBAR_GROUPING_SELECTOR_AFTER - 在 分组 选择器之后TablesRenderHook::TOOLBAR_GROUPING_SELECTOR_BEFORE - 在 分组 选择器之前TablesRenderHook::TOOLBAR_REORDER_TRIGGER_AFTER - 在重新排序触发器之后TablesRenderHook::TOOLBAR_REORDER_TRIGGER_BEFORE - 在 重新排序 触发器之前TablesRenderHook::TOOLBAR_SEARCH_AFTER - 在搜索容器之后TablesRenderHook::TOOLBAR_SEARCH_BEFORE - 在 搜索 容器 之前TablesRenderHook::TOOLBAR_START - 工具栏的起始TablesRenderHook::TOOLBAR_COLUMN_MANAGER_TRIGGER_AFTER - 在 列管理器 触发器之后TablesRenderHook::TOOLBAR_COLUMN_MANAGER_TRIGGER_BEFORE - 在 列管理器 触发器之前所有这些渲染钩子可以被限定范围到任何 Livewire 组件类。当使用 Panel Builder 时,这些类可能是资源的列表页或管理页,或者是一个关系管理器。
在这种情况下,作用域通常不足够,因为 Livewire 组件可以有多个动作,因此你可以将 action 数据作为 Filament\Actions\Action 来访问,以识别所有这些渲染钩子中的特定动作。
use Filament\Actions\View\ActionsRenderHook;ActionsRenderHook::MODAL_CUSTOM_CONTENT_AFTER - 在 模态内容 之后ActionsRenderHook::MODAL_CUSTOM_CONTENT_BEFORE - 在 模态内容 之前ActionsRenderHook::MODAL_CUSTOM_CONTENT_FOOTER_AFTER - 在 模态内容页脚 之后ActionsRenderHook::MODAL_CUSTOM_CONTENT_FOOTER_BEFORE - 在 模态内容页脚 之前ActionsRenderHook::MODAL_SCHEMA_AFTER - 在 模态弹窗Schema 之后ActionsRenderHook::MODAL_SCHEMA_BEFORE - 之前 模态框模式use Filament\Widgets\View\WidgetsRenderHook;WidgetsRenderHook::TABLE_WIDGET_END - 表格小部件的末尾,在表格本身之后,也可以限定范围到表格小部件类WidgetsRenderHook::TABLE_WIDGET_START - 表格组件的开始位置,在表格本身之前,也可以限定范围到表格组件类一些渲染钩子可以被赋予一个“作用域”,这使得它们能够仅在特定页面或 Livewire 组件上输出。例如,你可能希望注册一个渲染钩子仅用于 1 个页面。为此,你可以将页面或组件的类作为第二个参数传递给 registerRenderHook():
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
use Illuminate\Support\Facades\Blade;
FilamentView::registerRenderHook(
PanelsRenderHook::PAGE_START,
fn (): View => view('warning-banner'),
scopes: \App\Filament\Resources\Users\Pages\EditUser::class,
);你也可以传递一个作用域数组来注册渲染钩子:
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
FilamentView::registerRenderHook(
PanelsRenderHook::PAGE_START,
fn (): View => view('warning-banner'),
scopes: [
\App\Filament\Resources\Users\Pages\CreateUser::class,
\App\Filament\Resources\Users\Pages\EditUser::class,
],
);一些用于面板构建器的渲染钩子允许您将钩子作用域限定到资源中的所有页面:
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
FilamentView::registerRenderHook(
PanelsRenderHook::PAGE_START,
fn (): View => view('warning-banner'),
scopes: \App\Filament\Resources\Users\UserResource::class,
);$scopes 被传递给渲染钩子函数, 并且你可以使用它们来确定渲染钩子正在哪个页面或组件上渲染:
use Filament\Support\Facades\FilamentView;
use Filament\View\PanelsRenderHook;
FilamentView::registerRenderHook(
PanelsRenderHook::PAGE_START,
fn (array $scopes): View => view('warning-banner', ['scopes' => $scopes]),
scopes: \App\Filament\Resources\Users\UserResource::class,
);渲染钩子可以在钩子被渲染时接收“数据”。要从渲染钩子访问数据,您可以使用 array $data 参数将其注入钩子的渲染函数中:
use Filament\Support\Facades\FilamentView;
use Filament\Tables\View\TablesRenderHook;
FilamentView::registerRenderHook(
TablesRenderHook::FILTER_INDICATORS,
fn (array $data): View => view('filter-indicators', ['indicators' => $data['filterIndicators']]),
);插件开发者可能会发现向其用户暴露渲染钩子很有用。你不需要在任何地方注册它们,只需在 Blade 中像这样输出它们:
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_START) }}为了提供 作用域 你的渲染钩子, 你可以将它作为第二个参数传递给 renderHook(). 例如, 如果你的钩子在一个 Livewire 组件中, 你可以使用 static::class 传递该组件的类:
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_START, scopes: $this->getRenderHookScopes()) }}你甚至可以将多个作用域作为数组传递,并且所有匹配其中任何一个作用域的渲染钩子都将被渲染:
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::PAGE_START, scopes: [static::class, \App\Filament\Resources\Users\UserResource::class]) }}你可以将 数据 传递给渲染钩子,通过 renderHook() 函数的 data 参数:
{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\Tables\View\TablesRenderHook::FILTER_INDICATORS, data: ['filterIndicators' => $filterIndicators]) }}