我正在编写一个多语言词典应用程序。当用户选择一种语言来使用数据时,该语言应适用于每个页面,直到他们选择另一种语言为止。理想情况下,语言应为URL的一部分,以使英语单词“ double”和法语单词“ double”的地址不同。也可以不指定任何语言,以便“ double”将同时显示英语和法语单词。我也想同时过滤多个字段上的数据,例如单词本身和语言。
我正在尝试使它适合Laravel资源概念。 index
的{{1}}视图应显示按语言过滤的所有单词,如果未指定语言,则不显示所有单词。 Word
应该保留create
的语言。 index
应该只使用表单数据。如果已指定,则该语言可以在store
视图中作为隐藏字段包括在内。 create
并不是严格说来需要语言过滤器,但是如果用户随后回到show
,则仍然需要应用过滤器。
我开始使用路由,但这意味着我必须为每个过滤器硬编码一条路由。我还考虑过使用会话数据,但这意味着URL将不包含过滤器。如果过滤器作为查询字符串附加,Laravel将如何访问它们?这是一个好的解决方案吗?
我正在使用Laravel 5.8。 Laravel在视图之间持久保存此类数据过滤器的最佳方法是什么?
答案 0 :(得分:0)
我的应用程序的许多领域都存在类似的问题。我们偶尔为此使用Session
,但是通常找到解决此问题的最有效,最简单的方法是将数据库字段附加到user
对象。
如果您正在使用任何类型的身份验证,则 Laravel 已经准备在每个页面视图上启动user
对象,因此无需任何额外的数据库调用就可以拉出过滤器。如果未指定语言,则\Auth::user()->current_lang_id
将为null
,因此将不应用任何过滤器。通常,我们使用一种关系(例如'currentLang()
'),使用户可以轻松查看语言并可以自动在表单上进行绑定。
我们发现,这样做的好处是,它使每个用户个性化,并且以一种简单的方式“记住”会话之间的用户偏好-无需进行数十条路由或特殊的变量+逻辑在多条路线上,因为这些路线包括您的过滤器。相反,您可以将逻辑放在基本控制器的顶部并完成它。
最后-在用户的db字段中更改语言只是标准的简单CRUD。
HTH