Filament v4 Beta 版发布 - 特性一览(2/2)
(接上篇:Filament v4 Beta 版发布 - 特性一览 ½)
Infolists
Code entry
Code entry 允许你在信息列表(infolist)中显示高亮代码。它在服务器上使用 Phiki 进行代码高亮标注。
Tables
自定义数据表格
Filament 表格通常由 Eloquent 模型提供,但这并不总是这样。当数据未存储在数据库中时,或者你想渲染外部或计算后数据时,现在可以使用自定义数据作为数据源。
要使用自定义数据,请将数组传递给 records()
方法。这使你可以在没有数据库的情况下渲染简单的数据集,同时仍然支持列、排序、搜索、分页和操作等功能。
你还可以从外部 API 获取数据。例如,使用 Laravel 的 HTTP 客户端从 REST API 中提取数据,并将其作为 record()
中的数组返回。这对于集成第三方服务或远程后端非常有用。
使用 Select 过滤器的空关联
现在,你可以使用 hasEmptyOption()
方法来包含一个 “None” 选项,该选项过滤没有关联模型的记录。你可以使用 emptyRelationshipOptionLabel()
自定义此选项的标签。
列标题现在在空表中可见
即使没有可显示的记录,表格标题现在依然会显示,这提升了用户体验 —— 特殊是当使用基于列的实时和过滤器时。
批量操作(Bulk Action)增强
Action
统一操作(Action)
现在,表、表单、信息列表和常规 Action 之间的操作完全统一。
现在,所有操作都使用 Filament\Actions
命名空间,而不是为每个上下文都有单独的 Action
类。
工具栏操作(Toolbar action)
表现在支持专用工具栏操作区域。
你可以在 toolbarActions()
方法中放置常规操作和批量操作。
这对于诸如“创建”之类的操作非常有用,这些操作不绑定到特定的行,也可以使批量操作在表的工具栏中更可见和更可访问。
批量操作
改进批量操作性能
批量操作现在支持 chunkSelectedRecords()
方法,允许选中的记录以更小的批次进行处理,而不用一次性将所有记录加载到内存中 —— 这改进了使用大数据集时的性能,同时减少了内存使用。
授权批量操作
你现在可用使用 authorizeIndividualRecords()
,对批量操作中每个选中的记录检查策略方法。
只有用户有权操作的记录才会包含在 $records
数组中。
批量操作通知
现在,你可以在批量操作完成后显示通知,告知用户结果,这在由于授权而跳过某些记录时特别有用。
- 当所有记录都成功处理时,使用
successNotificationTitle()
。 - 当部分或所有记录失败时,使用
failureNotificationTitle()
显示消息。
这两种方法都可以接受一个函数,该函数使用 $successCount
和 $failureCount
显示成功和失败的记录数。
预制批量操作
预制批量操作现在可以在不获取和水合(hydrating)所有选定模型的情况下运行,从而显著提高了大数据集的性能。
反选记录
使用“全选”时,取消选择(反选)的记录现在会被跟踪。这通过最小化需要存储的记录键的数量来提高性能。
限速措施
现在你可以使用 rateLimit()
方法现在 Action 的触发频率 —— 按用户 IP,按分钟。
授权
授权消息现在可以显示在操作 tooltips
和 notification
中。
导入操作(Import Action)
导入关联
BelongsToMany 关联现在可以通过 Action 导入。
导出操作(Export Action)
XLSX 列样式
现在,你可以使用导出器类中的 makeXlsxRow()
和 makeXlsxheaderRow()
方法自定义 XLSX 导出中单个单元格的样式。
自定义 XLSX 写入器
现在你可以在导出器(Exporter)类中配置 OpenSpout XLSX writer
- 使用
getXlsxWriterOptions()
来设置类似于列宽这样的导出选项。 - 重写
configureXlsxWriterBeforeClosing()
以在最终确定之前修改写入器实例。
禁用按钮的 Tooltip
现在可以在禁用的按钮中显示 tooltip()。
测试 Action
v4 中的测试操作现在更简单、更精简。有关完整详细信息,请参阅测试操作部分。
Widget
图表可折叠
图表现在可以通过将 Widget 类的 $isCollapsible
属性设置成 true
来使之可折叠。
图表 Widget 自定义过滤器
图表 widgets 现在支持使用 HasFiltersSchema
trait 来自定义过滤器 Schema。你可以使用 filtersSchema()
使用 Schema 组件定义过滤器,通过 $this→filters
属性范文提交的过滤值。
仪表盘
仪表盘 Widget 现在支持完全响应的网格布局系统。
多租户
多租户现在现在自动应用全局 scope 和生命周期事件。
unique 和 exists 验证
Laravel 默认的 unique 和 exists 验证规则绕过 Eloquent 模型,这意味着它们忽略了多租户中使用的全局作用域。这可能会导致租户之间的错误验证失败。
要确保租户之间正确的数据隔离,可以使用 scopedUnique()
和 scopedExists()
方法。
面板配置
Inter 字体现在已本地加载
Filament 现在在本地加载 Inter 字体,而不是默认从 CDN 加载。你可以使用配置文件中的 font()
方法更改字体。
子导航位置
默认情况下,子导航显示在每个页面的起始位置。现在你可以使用 subNavigationPosition()
方法为整个面板全局重写它。
可用的选项包括:
- Start – 默认位置
- End – 在底部渲染
- Top – 显示成选项卡(tabs)
严格授权模式
默认情况下,如果策略或策略方法不存在,Filament 允许访问资源——假设不需要授权。
为了实施更严格的安全性,你可以使用 strictAuthorization()
启用严格授权模式。如果缺少策略或方法,这将引发异常,确保所有访问都被明确定义。
邮箱修改验证
当将 profile()
功能与 emailChangeVerification()
一起使用时,用户必须在新电子邮件地址激活之前对其进行验证。验证链接将发送到新电子邮件(有效期为 60 分钟),在点击之前,地址不会在数据库中更新。为了增加安全性,还会向用户的旧电子邮件发送取消链接,以阻止未经授权的更改。
错误通知
现在,你可以自定义错误消息在 Filament 面板中的显示方式。
当 Laravel 的调试模式关闭时,Filament 会用 flash 通知替换 Livewire 的全屏错误模式。你可以:
- 通过
errorNotifications(false)
全局禁用该行为 - 使用
registerErrorNotification(title, body)
自定义默认的错误消息 - 使用
statusCode
参数为特定的 HTTP 状态码设置自定义消息。 - 通过
$hasErrorNotifications
属性基于每个页面启用或者禁用错误通知。
这使你可以在出现问题时完全控制用户体验。
小结
Filament v4 Beta 带来了广泛的改进,旨在使您的开发体验更快、更一致、更易于维护。由于它仍处于测试阶段,现在是探索新功能和分享反馈的最佳时机。如果你需要稳定版本,请参阅 3.x 文档。
要将你的应用程序升级到 Filament v4 测试版,请阅读升级指南。要将 Filament v4 安装到新应用中,请访问安装指南。