【发布时间】:2019-04-20 20:56:33
【问题描述】:
这可能有点主观,但我觉得必须存在最佳实践(甚至对于 Laravel 应用程序来说也是好的设计)。谷歌搜索会导致很多与这个问题的实际点无关的事情。
假设我正在构建一个包含团队的 Web 应用程序,其中可能有项目,可能有文档。
我应该设计路由以使文档在他们所属的项目的路径内,然后在他们所属的团队的路径内,还是保持在顶层?
据我所知,这个频谱有两个端点值得讨论(其他选项只是介于两者之间的灰色):
嵌套
例如,文档 C 位于:/teams/team-a/projects/project-b/documents/doc-c
这样做很容易,在路由文件中,我可以使用route groups 来帮助保持结构清洁。我认为这对用户来说更合乎逻辑,也许更方便(他们可以自己制定 URL!)。我担心的是我将复杂性导入每个页面请求:
- 检查路由是否完整(即 doc-c 确实属于 project-b),并且
- 用户有权访问整个路由中的每个嵌套资产。
我是否应该在每个控制器方法的开头,为每个路由参数对每个资源进行门/策略检查?否则,这能抽象到哪里去?
关于路由完整性,我从未见过对此进行测试的示例 - 所以这不是一种常见的方法吗?如果我们不验证路由完整性,那么页面可能会通过入侵路由来显示混合信息(例如,/teams/team-a/projects/project-Z/documents/doc-c,会在 doc 上显示有关项目 Z 的信息-c 的页面)。
无嵌套
例如,Doc C 位于:/documents/doc-c
在这个例子中,每个资产都有自己的基础路由,我猜更像是一个 API。
不需要完整性检查,控制器会预先确定显示的其他资产以生成视图。
但是这个用户体验足够好吗?我见过的大多数网站都没有这样做。
【问题讨论】:
-
值得注意的是,Laravel 7 现在开箱即用,如果您使用此处描述的路由范围:laravel.com/docs/7.x/routing#implicit-binding
标签: laravel laravel-5 routes laravel-routing