【问题标题】:Laravel 5 - Routing with optional prefixesLaravel 5 - 带有可选前缀的路由
【发布时间】:2015-05-13 11:14:53
【问题描述】:

我希望能在 Laravel 5 中提供路由方面的帮助。

我有三个模型:ReasearchLine、ReasearchGroup 和 Publications。 每个 ReasearchGroup 都属于一个 ReasearchLine。每个 Publication 都可以属于一个 ReasearchLine 和一个 ReasearchGroup。

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

research_lines 表: 身份证

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

    • 显示所有出版物

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

有什么建议吗?

提前谢谢你。 问候。

【问题讨论】:

    标签: php routes laravel-5


    【解决方案1】:

    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

    虽然我个人不喜欢这样做

    【讨论】:

    • 嗨,亚历山大。感谢您的帮助。
    • 是的,我需要网址与我所说的完全相同(客户要求)。我通过多个带有闭包的路由和直接调用我的操作来解决它。看起来很脏,但到目前为止我找不到更好的解决方案。
    • @CarlosMaia,没关系,过去曾在营销部门工作过,我知道您对必须过于具体的事情感到痛苦。很高兴知道这一切最终都解决了。
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2018-01-08
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多