跨多个视图的持久性Laravel数据过滤器

时间:2019-07-20 02:02:32

标签: laravel-5 filtering laravel-5.8

我正在编写一个多语言词典应用程序。当用户选择一种语言来使用数据时,该语言应适用于每个页面,直到他们选择另一种语言为止。理想情况下,语言应为URL的一部分,以使英语单词“ double”和法语单词“ double”的地址不同。也可以不指定任何语言,以便“ double”将同时显示英语和法语单词。我也想同时过滤多个字段上的数据,例如单词本身和语言。

我正在尝试使它适合Laravel资源概念。 index的{​​{1}}视图应显示按语言过滤的所有单词,如果未指定语言,则不显示所有单词。 Word应该保留create的语言。 index应该只使用表单数据。如果已指定,则该语言可以在store视图中作为隐藏字段包括在内。 create并不是严格说来需要语言过滤器,但是如果用户随后回到show,则仍然需要应用过滤器。

我开始使用路由,但这意味着我必须为每个过滤器硬编码一条路由。我还考虑过使用会话数据,但这意味着URL将不包含过滤器。如果过滤器作为查询字符串附加,Laravel将如何访问它们?这是一个好的解决方案吗?

我正在使用Laravel 5.8。 Laravel在视图之间持久保存此类数据过滤器的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我的应用程序的许多领域都存在类似的问题。我们偶尔为此使用Session,但是通常找到解决此问题的最有效,最简单的方法是将数据库字段附加到user对象。

如果您正在使用任何类型的身份验证,则 Laravel 已经准备在每个页面视图上启动user对象,因此无需任何额外的数据库调用就可以拉出过滤器。如果未指定语言,则\Auth::user()->current_lang_id将为null,因此将不应用任何过滤器。通常,我们使用一种关系(例如'currentLang()'),使用户可以轻松查看语言并可以自动在表单上进行绑定。

我们发现,这样做的好处是,它使每个用户个性化,并且以一种简单的方式“记住”会话之间的用户偏好-无需进行数十条路由或特殊的变量+逻辑在多条路线上,因为这些路线包括您的过滤器。相反,您可以将逻辑放在基本控制器的顶部并完成它。

最后-在用户的db字段中更改语言只是标准的简单CRUD。

HTH