symfony 1.4 routing:使用URL参数匹配路由


symfony 1.4 routing: match routes using URL parameters

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

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

这工作得很好,但当做搜索直接(即浏览到/products/search?querystring=search...)我想设置一个<link rel="canonical">包含匹配友好的URL。这将有助于谷歌理解它们之间的关系,并且不会有重复的内容。

我把我的友好URL路由在routes.yml的顶部,并希望有一个神奇的匹配,但URL参数在symfony完成的检查中不被识别。我查了一下斯特劳特,没找到。这可能吗?

我最终为这些路由编写了一个自定义路由类,该类在调用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加入路由。yml条目。

尝试使用自己的路由:

friendly_search_resultpage:
  class: YourRouteClassName
...

并通过具体的规范化重载sroute::generate()(返回规范化的URL)。

这个重定向与301在我的项目在最后的sf1.4修订。