2011-05-17 39 views
2

在我的佈局腳本中,我希望創建一個鏈接,追加[?| &] lang = en到當前的URL,使用url視圖助手。所以,我希望這種情況發生:在Zend中使用視圖助手將當前URL添加到參數

http://localhost/user/edit/1 =>http://localhost/user/edit/1?lang=en
http://localhost/index?page=2 =>http://localhost/index?page=2&lang=en

我試圖解決方案建議Zend Framework: Append query strings to current page url,直接訪問路由器,但也不工作。

我的佈局腳本包含:

<a href="<?=$this->escape($this->url(array('lang'=>'en')))?>">English</a> 

如果使用默認路線,它會追加/郎/ EN,但是當使用另一條路線,沒有在所有的追加。
那麼,有什麼辦法可以在Zend中做到這一點,而我不必解析url?

編輯
對不起,我錯誤的解釋。不,我沒有製作一個自定義路由器。我剛剛添加了其他路線。我的錯。不工作的一個途徑是:

$Routes = array(
    'user' => array(
     'route' => 'admin/user/:mode/:id', 
     'defaults' => array('controller' => 'admin', 'action' => 'user', 'mode'=>'', 'id' => 0) 
    ) 
); 

foreach($Routes as $k=>$v) { 
    $route = new Zend_Controller_Router_Route($v['route'], $v['defaults']); 
    $router->addRoute($k, $route); 
} 
+1

你有沒有考慮加入'lang'到您的自定義路線有默認郎鹹平:

'admin/user/:mode/:id/*' 

此外,根據您的評論,你可以做這樣的事情? – Crashspeeder 2011-05-17 14:08:21

+0

是的,我考慮過了。但我不希望lang在每個請求中都被傳遞,如果不是,則恢復爲默認值。在我的引導程序中,我正在檢查是否通過了lang,如果存在,我將它存儲在會話中。此外,不必爲每條路線添加lang。 – ANisus 2011-05-18 06:34:45

+0

最簡單的方法 - 在會話中存儲最後的請求,添加控制器/動作來切換語言。它應該重定向回到先前從會話或主頁面獲取的請求。 – Xerkus 2011-05-19 07:20:09

回答

1

UPD:

您必須添加通配符路線或明確定義「郎」參數。如果未指定

class controllerplugin extends Zend_Controller_Plugin_Abstract 
{ 
    function routeShutdown($request) 
    { 
     if($request->getParam('lang', false) { 
      //store lang 
      Zend_Controller_Front::getInstance()->getRouter()->setGlobalParam('lang', NULL); //check if this will remove lang from wildcard parameters, have no working zf installation here to check. 
     } 
    } 
} 
+0

建議太多?大聲笑 – Ascherer 2011-05-17 16:26:42

+0

是的,你是對的。自定義路線。不是路由器。我編輯並添加了一條未能顯示我的lang參數的路線。 – ANisus 2011-05-18 06:36:31

+0

@ascherer是的。我知道至少打破路線的方式有二十幾種) – Xerkus 2011-05-18 12:21:58