Filament v3.1版本发布
框架(架构)  /  管理员 发布于 8个月前   270
在 Filament v3.0 版发布了 100 多个补丁之后(不是真的,我们是认真的),
我们有史以来发布的最大的小版本之一终于发布了!在这个版本中,我们为每个人都准备了一些东西!
从仪表盘和导航更新到用于处理和查询大型数据集的全新功能,应有尽有。
如果你想直接在 Github 上阅读变更,可以在这里找到 v3.1.0 更新日志。
否则,请继续阅读,让我们深入了解 Filament 3.1 版的一些新功能!
https://github.com/filamentphp/filament/releases/tag/v3.1.0
全局控制面板过滤器
仪表盘是 Filament 面板的重要组成部分。它们为开发人员提供了一种快速、
简便的方法来实施图表、统计和表格,以便深入了解用户的数据。
现在,从 3.1 版开始,Filament 面板让开发人员能够使用我们的内置表单组件创建全局过滤器!
只需简单三步,您就可以开始使用这些新的全局仪表盘过滤器:
在任何仪表盘类上使用 HasFiltersForm 特性
在同一个仪表盘类上实施新的 filtersForm() 方法。确保包含应用作过滤器的任何表单字段的模式!
使用 InteractsWithFilters 特质提供的 $this->filters 属性访问任何仪表板 widget 中的实时数据。
完成这些步骤后,对过滤器表单的任何更改都将更新部件的数据!
如果您不想用表单筛选器弄乱仪表盘,可以使用随附的 FilterAction 将表单置于模态中。
将此操作添加到仪表板后,就会在页面的页眉部分放置一个筛选器按钮,让用户可以访问筛选器。即使您的应用程序不需要在模态中使用过滤器,这种方法也有可能提高计算密集型查询的性能!使用模态时,筛选器不会立即应用。只有当用户点击模态中的 "应用 "按钮时才会应用。这样,我们只需在设置了所有筛选器后重新计算查询,而无需在用户每次更新筛选器值时重新计算。
更多信息请查看文档:
https://filamentphp.com/docs/3.x/panels/dashboard#filtering-widget-data
章节标题操作和中继器/生成器 "项目操作
操作是 Filament 面板的主要构建模块之一,因此我们一直在寻找改进其实用性的方法。
在 3.1 版中,我们为两个新区域添加了动作:章节标题和 Repeater/Builder 项目。
章节页眉操作正如其名称所示:您可以添加到章节页眉的操作按钮。
以前,与表单单个部分相关的操作必须与所有其他操作一起放在表单的顶部。
而现在,您可以将这些操作与相关数据放在一起!
中继器/创建器项操作的工作原理与这些部分标题操作类似。
但它们有一个独特之处,那就是这些操作可以感知其项目上下文。
通过这些项目操作,您可以使用特定项目实例上的值来执行您的操作。
中继器和构建器上的项目操作并不新鲜,过去我们也提供过一些预构建的操作,如 "删除 "和 "折叠"。
但现在有了 3.1 版,你可以根据每个项目自由创建自己的自定义操作!
请查看文档了解更多信息:
https://filamentphp.com/docs/3.x/forms/layout/section#adding-actions-to-the-sections-header
https://filamentphp.com/docs/3.x/forms/fields/repeater#adding-extra-item-actions-to-a-repeater
https://filamentphp.com/docs/3.x/forms/fields/builder#adding-extra-item-actions-to-a-builder
父导航栏
在 3.1 版之前,Filament 提供两级导航层次结构:导航部分和导航项目本身。
长期以来,这种设置为我们提供了很大的灵活性,但我们认为有必要增加一层。
现在,Filament 允许另一层导航:父导航项。
父导航项与普通导航项一样。
就像这些普通项目一样,你可以把它们放在版块中,并用它们导航到资源和页面。
不过,父导航项现在可以在其下方显示其他导航项!
当您的资源只与另一个资源相关时,这一点尤其有用。
例如,您可能有一个包含以下页面的 "商店 "部分:
"产品"、"类别 "和 "品牌"。"产品 "是 "商店 "中可行的顶级资源,
但 "类别 "和 "品牌 "资源只与 "产品 "相关。因此,"类别 "和 "品牌 "作为顶级导航项意义不大。
以前,由于 "产品 "已经嵌套在 "商店 "部分中,所以我们在这里做不了什么。
但现在,我们可以把 "类别 "和 "品牌 "导航项嵌套到 "产品 "父项下面。
这样做时,Filament 会调整导航项的样式,向用户显示这些页面属于 "产品 "上下文。
将导航项嵌套在父项下很简单。
在前面的例子中,我们可以通过将 CategoryResource 上的 $navigationParentItem 属性
设置为 "Products",将 "Categories "导航项嵌套到 "Products "下面。
这就是全部内容--其余的由丝线处理!
查看文档了解更多信息:
https://filamentphp.com/docs/3.x/panels/navigation#grouping-navigation-items-under-other-items
CSV 导入
世界上几乎没有什么是确定无疑的,但其中之一就是,
如果你创建的应用程序足够长,通过 CSV 文件处理大型数据集最终会成为一种需要。
导出 CSV 文件往往非常简单,但从 CSV 文件向应用程序导入数据却会很快变得困难。
首先,您必须处理文件的上传。
然后,创建将文件中的数据映射到底层数据模型的逻辑。
然后,创建导入数据的验证逻辑。实施数据验证后,就必须弄清楚如何处理任何导入错误。
是保存记录直到错误发生?还是捕捉错误并继续?
这些都是可以解决的问题,但如果有工具可以帮助您更轻松地建立这些集成,那岂不是更好?
别担心,Filament 3.1 会帮你解决。
Filament 现在提供了一套功能强大的工具,帮助您处理构建 CSV 导入系统过程中繁琐、重复的部分!
该系统可归结为两个主要概念:映射器和验证器。
映射器允许用户定义每个 CSV 列保存到哪些数据库字段。
无论 CSV 中上传的是哪一列,它们都能确保您的应用程序能理解输入的数据。
Filament 会尝试根据 CSV 列名自动确定适当的映射,但用户可以根据需要进行更改!
验证器的工作原理与 Laravel 的表单请求验证类似。
它们会查看导入的每一条数据,确保其大小和形状符合应用程序的预期。
但与 Laravel 的表单请求验证不同的是,如果有一条或多条导入行没有通过验证,我们不会停止导入!
在这种情况下,Filament 会生成一个新的 CSV 文件供您下载,其中只包含未通过验证的记录。
这样,您就可以查看任何未通过验证的条目,更新它们的值,并重新上传 CSV,
而无需重新上传通过验证的数据!
用 CSV 导入数据时,需要解决的一个常见问题是如何处理相关数据。
为了帮助解决这个问题,Filament 提供了自动处理 BelongsTo 关系的功能!
在任何 ImportColumn 上链上 relationship() 方法,Filament 就会找到相关模型,
并将适当的 ID 保存到记录中。
Filament 支持多种不同的查找相关数据的方法,因此请查阅文档,找到与您的数据最匹配的方法!
查看文档了解更多信息:
https://filamentphp.com/docs/3.x/actions/prebuilt-actions/import
查询生成器
系好安全带,因为这可能是我们在次版本中发布的最大功能!
出于各种业务和技术原因,查询和过滤数据非常重要,而对于许多用例来说,
Filament 中现有的过滤系统效果很好。
它允许你对特定列进行过滤和排序,这在用户试图缩小他们在单一维度中看到的数据范围时非常完美。
但是,如果用户需要更深入的解决方案,该怎么办呢?
也许你可以为自定义查询建立一个专门的页面?或者自定义部分?
这些都是可行的选择,但如果用户需要临时更改查询,该怎么办呢?
新的 Filament 查询生成器应运而生。
Filament 的查询生成器可以帮助开发人员设置过滤约束,让用户为他们的数据创建强大的查询。
用户可以在用户界面上看到这些限制条件,向查询中添加限制条件会自动更新可见数据。
约束条件可以使用 AND 和 OR 运算符连接,也可以使用 NOT 运算符进行否定。
它们可以对文本、布尔、日期和数字字段进行操作,还包括一个 SelectConstraint,
可以使用选择字段中的选项过滤任何列。
甚至还有一种关系约束(RelationshipConstraint),
可以根据相关模型的数据过滤任何字段(与 whereHas 类似)。
将这些不同的约束结合起来,用户就能在 Filament 中创建复杂的自定义数据查询!
查看文档了解更多信息:
https://filamentphp.com/docs/3.x/tables/filters/query-builder
子导航
在 Filament 3.1 中,我们不仅为主导航添加了导航功能,而且还添加了一种全新的方式,
引导用户访问与当前查看的资源相关的页面。我们称之为资源子导航。
Filament 中的子导航允许你在页面上下文中以侧边栏或一排标签的形式显示任何相关页面的链接。
例如,如果您正在查看 "帖子 "资源,您可以创建指向 "编辑 "页面和相关 "评论 "表格的快速链接。
将这些页面组合到一个侧边栏中,可以带来一些重要的好处:
将以前垂直堆叠的部分页面分开
将分散在一个或多个页面上的相关页面进行分组
通过链接到相关资源页面,提高常见工作流程的清晰度
为面板的资源页面添加子导航非常简单!要创建子导航,
您只需实现静态 getRecordSubNavigation() 方法。
一旦实现,Filament 将为您处理导航项的显示和管理!
更多信息,请查看文档:
https://filamentphp.com/docs/3.x/panels/resources/getting-started#resource-sub-navigation
区分验证
从 v3.1 版本开始,"不同 "验证规则终于登陆 Filament!
Filament 社区中的许多人(包括我们自己)都遇到过需要这一规则的情况,现在我们可以做到了!
通过添加 "区分 "规则(通过可链式区分()方法),
Filament 现在可以强制某些字段的值不能出现在任何其他 Repeater 项目中。
可以使用此规则的字段有
复选框
复选框列表
切换
单选框
选择
例如,您可以使用中继器字段为客户输入多个联系电子邮件。
作为该功能的一部分,其中只有一个电子邮件地址可以标记为 "主要"。
通过使用 "distinct "验证规则,我们可以确保在任何给定时间内,
只有一个 Repeater 项的 "Is Primary "切换设置为 true!
除了 distinct() 验证方法,我们还添加了一个名为 fixIndistinctState() 的方法。
这个方法可以代替 distinct(),告诉 Filament 尝试修复任何 "distinct "验证失败的情况。
根据字段类型的不同,Filament 会尝试用两种方法之一来修复这些差异。
对于布尔字段,当一个字段启用时,所有其他项目都将禁用该字段。
对于所有其他字段,当用户进行重复选择时,任何不一致的值都会被清除。
我们还为选择、单选和复选框列表字段添加了另一种特殊方法,
称为 disableOptionsWhenSelectedInSiblingRepeaterItems()。
使用该方法代替 distinct() 会告诉 Filament 从 Repeater 中该字段的所有其他实例中移除选中的值。
当你想防止用户知道某个选项不止一次可用时,这个方法会非常有用。
更多信息,请查阅文档:
https://filamentphp.com/docs/3.x/forms/fields/repeater#distinct-state-validation
荣誉提名
有一些更新还不够大,不值得在本帖中单独列出,但对我们来说足够令人兴奋,
因此我们希望确保将它们包括在内:
通过模式支持 "简单资源 "的全局搜索
使用 FileUpload 字段上的 imageEditor() 方法进行循环裁剪
通过模型转换自动检测布尔列
TextColumn 和 TextEntry 的可扩展限制
感谢您的支持!
这个版本耗费了我们大量的时间和精力,如果没有 Filament 社区提出功能需求、
提供解决方案和测试所有这些更新,我们是不可能完成的!
我们非常期待看到大家创造出怎样令人惊叹的作品!
如果您还没有加入 Filament 官方论坛,
这里是您寻求帮助、展示您的酷炫项目或与 Filament 社区的好朋友聊天的绝佳场所。
请一定来告诉我们您对 3.1 版的看法!您最喜欢的新功能是什么?
转:
https://laravel-news.com/filament-3-1
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号