我很感激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
为了做到这一点,我正在研究路由前缀,但我不知道如何将前缀设置为可选。
有什么建议吗?
提前谢谢你。 问候。
答案 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
虽然我个人不喜欢这样做