【问题标题】:Trailing slash for route default?路由默认的尾随斜杠?
【发布时间】:2014-07-09 18:00:06
【问题描述】:

我有以下路线:

reviews:
    pattern: /reviews/{uid}{trailingSlash}
    defaults: { _controller: unrealsp.cms.controller:handle_review, uid: "index", trailingSlash : "/" }
    requirements: { trailingSlash : "[/]{0,1}" }

我使用this stackoverflow answer 使用斜杠完成了这项工作。

路由将识别“/reviews” URL 并引用 index uid,显示可用评论的索引(而不是它会调用任何评论的单个评论)其他uid)。但是,它不会将“/reviews/”识别为索引,表示没有这样的路由。我该如何改变呢?

【问题讨论】:

    标签: symfony routes yaml


    【解决方案1】:

    尝试将其更改为:

    pattern: /reviews/
    

    {uid} 使路由器所需的参数,因此如果您希望 /reviews/ 有效,则必须将其从路由定义中删除。这样,您只需添加控制器:

    $uid = $request->get('uid','index');
    

    另一种解决方案是:

    reviews:
        pattern: /reviews/{uid}
        defaults: { _controller: unrealsp.cms.controller:handle_review }
        requirements: { uid: "\d+" }
    
    reviews_index:
        pattern: /reviews/
        defaults: { _controller: unrealsp.cms.controller:handle_review }
    

    【讨论】:

    • 这样,我无法访问任何不是评论索引页面的评论。
    • 删除 uid: "index", trailingSlash : "/" } 要求:{ trailingSlash : "[/]{0,1}" } 为什么?在控制器中你应该只做 $uid = $request->get('uid','index');
    • 这在我看来毫无意义。然后我只剩下一个 /reviews/ 没有任何参数的路由。当路由中没有定义什么是'index'和'uid'时,它应该如何知道什么是'index'?
    • “它”(路由器)不是,它是控制器来处理它。唯一的区别是您将从 /reviews/XXX 移动到 /reviews/?id=XXX 另一件事是添加 2'd 路线,我更新了我的答案
    猜你喜欢
    • 2020-01-27
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2011-02-11
    • 2021-09-15
    相关资源
    最近更新 更多