[英]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.