Laravel 5 - 带可选前缀的路由

时间:2015-05-13 11:14:54

标签: php routes laravel-5

我很感激Laravel 5中的路由帮助。

我有三个模型:ReasearchLine,ReasearchGroup和Publications。 每个ReasearchGroup都属于ReasearchLine。每个发布都可以属于ReasearchLine和ReasearchGroup。

我的数据库架构如下所示:

research_lines 表: ID

research_groups 表: id,research_line_id(在research_lines上引用id)

出版物表: id,research_line_id(在research_lines上引用id),research_group_id(在research_groups上引用id)

所以,我希望我的出版物可以通过以下方式访问:

  • /research-group-slug/research-line-slug/publications

    • 显示属于研究线和研究组的所有出版物
  • /research-line-slug/publications

    • 显示属于研究组的所有出版物
  • /publications

    • 显示所有出版物

为了做到这一点,我正在研究路由前缀,但我不知道如何将前缀设置为可选。

有什么建议吗?

提前谢谢你。 问候。

1 个答案:

答案 0 :(得分:0)

laravel中的路由与您创建的一样复杂,

Route::get('/', 'MyController@myFunction');

使用大括号语法

传递参数
Route::get('/segment/{id}' ...

对于嵌套,你去

Route::get('/segment/{id}/segment/{id}' ...

对于可选参数

Route::get('/segment/{id}/segment/{name?}', function($name = null)

当涉及到可选内容时,您定位包含参数的路线的顺序是必不可少的。

根据我的经验,如果你试图使用太多没有任何硬编码前缀的参数,或者以过度嵌套的方式使用可选参数,那么这些纸牌往往会掉下来。路由是在一天结束时的模式匹配。

我是一个懒惰的家伙所以我会用

来解决它
Route::get('/publications',...
Route::get('/research-line/{slug}/publications',...
ect ect

如果你说你必须像你说的那样具体,那么它似乎在这里被回答了 - Laravel optional routing parameter

虽然我个人不喜欢这样做