2011-07-22 69 views
1

我試圖建立一個查詢字符串如下:如何在zend框架中構建查詢字符串?

<a href="<?= $this->url(array('page' => $this->next)) ?>" class="next">Next Page</a> 

我想添加一個數組來查詢字符串。例如,array('find_loc'=>'New+York', 'find_name'=>'starbucks')

我期望得到的URL看起來像http://example.com/1/?find_loc=New+York&find_name=starbucks

什麼是做到這一點的最好方法是什麼?我發現一個similar question,建議將該字符串附加到該URL。查詢字符串是否有幫助器?

+0

有一個PHP函數,建立查詢字符串http:// www.php.net/manual/en/function.http-build-query.php –

回答

1

簡單回答你的問題是沒有。

這裏是類描述:

/** 
* Helper for making easy links and getting urls that depend on the routes and router 
* 
* @package Zend_View 
* @subpackage Helper 
* @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 
* @license http://framework.zend.com/license/new-bsd  New BSD License 
*/ 

幫手製作容易聯繫並獲得網址依賴路線路由器

我想描述的目的是明確的。用它來製作取決於路由和路由器的URL。所以,只需將您的查詢字符串作爲您在問題中發佈的鏈接中的推薦內容追加即可。

+0

您是否認爲這是最好的方法:' 'New+York', 'find_name'=>'starbucks')) ?>" class="next">Next Page' –

+0

絕對。構建搜索時非常普遍的做法。 –

0

以下應爲你工作:

<a href="<?= $this->url(array('page' => $this->next, 'find_loc' => 'New York', 'find_name' => 'starbucks')')) ?>" class="next">Next Page</a> 

ZF-Router將值映射到Request對象。

在你的控制器,你可以用Response-Object訪問這些PARAMS:

$loc = $this->getRequest()->getParam('find_loc'); 
$name = $this->getRequest()->getParam('find_name); 
+0

這對我來說不起作用,因爲url助手匹配具有路由器結構的變量。換句話說,它只有在application.ini中預先定義了變量時纔有效 - resources.router.routes.home.route = /:page /:find_name /:find_loc –

0

您可以自定義的助手:

class My_View_Helper_UrlHttpQuery extends Zend_View_Helper_Abstract 
{ 
    public function urlHttpQuery($query) 
    { 
     $urlHelper = $this->view->getHelper('url'); 
     $params = func_get_args(); 
     array_shift($params);//removing first argument 
     $url = call_user_func_array(($urlHelper, 'url'), $params); 
     if(!is_string($query)) { //allow raw query string 
      $query = array($query); 
      $query = http_build_query($query); 
     } 
     if(!empty($query) { 
      $url .= '?' . ltrim('?', $query); 
     } 
     return $url; 
    } 
} 

你註冊這個幫手與視圖後,您可以由於上游代碼沒有按使用這樣<a href="<?=$this->urlHttpQuery(array('find_loc'=>'New+York', 'find_name'=>'starbucks'), array('page' => $this->next), 'routename', $otherUrlHelperParams) ?>" class="next">Next Page</a>

0

工作代碼

/** 
* Class Wp_View_Helper_UrlHttpQuery 
*/ 
class Wp_View_Helper_UrlHttpQuery extends Zend_View_Helper_Abstract 
{ 
    public function urlHttpQuery($query = array()) 
    { 
     $urlHelper = $this->view->getHelper('url'); 
     $params = func_get_args(); 
     //removing first argument 
     array_shift($params); 
     $url = call_user_func_array(array($urlHelper, 'url'), $params); 
     if (is_array($query) || is_object($query)) { 
      $query = http_build_query($query); 
     } 

     if (!empty($query)) { 
      $url .= '?' . ltrim($query, '?'); 
     } 
     return $url; 
    } 

} 

沒有工作