簡體   English   中英

symfony 1.4路由:使用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... )時,我想設置一個包含匹配友好URL的<link rel="canonical"> 這將有助於Google了解這種關系,並且沒有重復的內容。

我將友好的URL路由放在routes.yml的頂部,並希望進行魔術匹配,但是symfony進行的檢查無法識別URL參數。 我已經鑽進sfRoute,沒有運氣。 可能嗎?

我最終編寫了一個用於這些路由的自定義路由類,該類在調用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條目。

嘗試使用自己的路線:

friendly_search_resultpage:
  class: YourRouteClassName
...

然后通過具體的規范化(返回規范的URL)來重載sfRoute :: generate()。

在上一個sf1.4版本中,這會在我的項目中重定向為301。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM