laravel-5 - 跨多个视图的持久 Laravel 数据过滤器
问题描述
我正在编写一个多语言词典应用程序。当用户选择一种语言来使用数据时,该语言应该应用于每个页面,直到他们选择不同的语言。理想情况下,语言应该是 URL 的一部分,以便英语单词“double”和法语单词“double”的地址不同。也应该可以不指定语言,这样“double”将同时显示英语和法语单词。我还想同时过滤多个字段的数据,例如单词本身和语言。
我试图将其融入 Laravel 资源概念。的index
视图Word
应显示按语言过滤的所有单词,如果未指定语言,则不过滤。create
应该保持语言从index
. store
应该只使用表单数据。如果指定了语言,则可以将其作为隐藏字段包含在create
视图中。show
严格来说不需要语言过滤器,但是如果用户然后返回index
,仍然需要应用过滤器。
我开始使用路由,但这意味着我必须为每个过滤器硬编码一个路由。我也考虑过使用会话数据,但这意味着 URL 不会包含过滤器。如果过滤器作为查询字符串附加,Laravel 将如何访问它们?这是一个好的解决方案吗?
我正在使用 Laravel 5.8。在视图中持久保存这种类型的数据过滤器的最佳 Laravel 方法是什么?
解决方案
我在我们的应用程序的许多领域都有类似的问题。我们偶尔会Session
为此使用,但通常发现解决此问题的最有效和最简单的方法是将数据库字段附加到user
对象。
如果您使用任何类型的身份验证,Laravel已经user
在每个页面视图上启动对象,因此可以在不额外调用数据库的情况下提取过滤器。如果未指定语言,\Auth::user()->current_lang_id
则将是null
,因此不会应用过滤器。我们通常使用一种关系(例如' currentLang()
'),它使用户可以轻松查看语言并可以自动绑定表单。
我们发现,这样做的好处是它可以为每个用户个性化它,并且它以一种简单的方式“记住”用户在会话之间的偏好 - 无需在多个路由上创建数十条路由或特殊变量 + 逻辑因为这些路线包括您的过滤器。相反,您可以将您的逻辑放在基本控制器的顶部并完成它。
最后 - 当它是用户的 db 字段时更改语言只是标准的、简单的 CRUD。
HTH
推荐阅读
- python - AWS cli 不在 Cron 中工作,但在终端中工作
- angular - @angular/fire 实时数据库:如何获取其下的键和值
- c# - 将对象添加到集合中:集合在不同的类中声明
- javascript - 使用 Javascript 操作数据
- android - 使用模糊、颜色和 Y 偏移创建阴影
- dns - www.example.com 没有打开,而 example.com 工作正常如何解决?
- swift - 找到不支持的类型 - 使用 -availableMetadataObjectTypes 问题
- php - PHP在多个条件下删除多维数组键
- sql - SQL CTE 这个查询怎么能跑得超过 20 分钟?
- reactjs - 使用 react native ui kitten 为 React Native 设置主题