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

时间:2013-01-11 13:27:14

标签: php symfony1 routes symfony-1.4

我为一些搜索结果页面设置了友好的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,没有运气。有可能吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试使用您自己的路线:

friendly_search_resultpage:
  class: YourRouteClassName
...

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

在上一次sf1.4修订版本的项目中重定向为301。