【问题标题】:Symfony2 routes redirecting to wrong controllerSymfony2 路由重定向到错误的控制器
【发布时间】:2016-08-09 10:18:08
【问题描述】:

在我的 symfony2 应用程序中,我希望我的页面有特定的路由,以便与我的 seo 很好地配合,但是我遇到了一些严重的问题,我不明白它们..

示例:

两条路线:

blog_article:
    path: /blog/{slug}
    defaults: {_controller: ApplicationEDBlogBundle:Blog:singleArticle}

product:
    path: /{category}/{name}
    defaults: { _controller: MpShopBundle:Product:view}

product 路由工作正常,但blog_article 路由总是重定向到product 路由..

据我了解,如果我打开博客:/blog/firstBlog/ 默认情况下它认为博客是一个类别,firstBlog 是产品名称,因为我的product 路由是最后一个路由。

但是,如果我在我的树枝上特别指定要走哪条路线,它不应该工作吗?

例如:{{ path('blog_article', {slug: blog.slug}) }}。这不应该看看blog_article 路由并打开所需的控制器吗?还是那样不行?

如果是这样,如何保持我想要的漂亮网址?

【问题讨论】:

    标签: php symfony routing


    【解决方案1】:

    把路由改成

    blog_article:
        path: /blog/{slug}
        defaults: {_controller: ApplicationEDBlogBundle:Blog:singleArticle}
    
    product:
        path: /cat/{category}/{name}
        defaults: { _controller: MpShopBundle:Product:view}
    

    会好的。

    在您的示例中 {category} 可能是 "blog" ,因此匹配了第一条路线。

    如果您更改订单,它也可以工作(首先是产品)。但这不是很好的解决方案(如果有人添加类别博客怎么办?)

    【讨论】:

      【解决方案2】:

      不,它不是那样工作的,即您的示例路径代码并不意味着路由应该寻找 blog_article 路由:

      twig path 函数只是将路由扩展为实际的 url (/blog/yourslug),当实际访问该 url 时,系统会以相反的方式从 url 到路由匹配(匹配到任何一个上面列出的两个路由定义中的第一个)。

      如果您有这种路线,解决方案是将它们整齐地按正确的顺序排列(大多数通用的 - 在这种情况下是产品 - 始终是最后一个),或者如果无法订购,您可以尝试如果适用,可以通过提出一些特定的路线要求来解决这个问题。

      【讨论】:

        猜你喜欢
        • 2017-12-06
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多