【问题标题】:symfony 1.4 routing: match routes using URL parameterssymfony 1.4 路由:使用 URL 参数匹配路由
【发布时间】:2013-01-11 13:27:13
【问题描述】:

我为一些搜索结果页面设置了友好的 URL,为每个页面使用自定义路由:

friendly_search_resultpage:
  url: /products/my-friendly-alias
  param:
    module: products
    action: search
    querystring: searchattribute
    querystring2: searchattribute2

这很好用,但是当直接进行搜索(即浏览到/products/search?querystring=search...)时,我想设置一个包含匹配友好 URL 的<link rel="canonical">。这将有助于 Google 了解这种关系以及不存在重复的内容。

我将友好的 URL 路由放在 routes.yml 的顶部,并希望有一个神奇的匹配,但是在 symfony 所做的检查中无法识别 URL 参数。我已经深入研究了 sfRoute,但没有运气。有可能吗?

【问题讨论】:

    标签: php symfony1 routes symfony-1.4


    【解决方案1】:

    我最终编写了一个自定义路由类来用于这些路由,它在调用 url_for() 时执行。代码如下:

    <?php
    class mySearchFriendlyRoute extends sfRoute
    {
      public function matchesParameters($params, $context = array())
      {
        // I can't find symfony sorting parameters into order, so I do
        // (so that foo=x&bar=y is treated the same as bar=y&foo=x)
        ksort($params);
        $mine = $this->defaults;
        ksort($mine);
        if ($params == $mine) {
          return true;
        }
        return false;
      }
    }
    

    要使用,请将class: mySearchFriendlyRoute 添加到 routes.yml 条目。

    【讨论】:

      【解决方案2】:

      尝试使用自己的路线:

      friendly_search_resultpage:
        class: YourRouteClassName
      ...
      

      然后通过具体的规范化重载 sfRoute::generate() (返回规范的 URL)。

      在上一次 sf1.4 修订后,这在我的项目中重定向为 301。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-06
        • 2019-02-22
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多