2011-07-22 9 views
1

私は次のようにクエリ文字列を構築しようとしている:zendフレームワークでクエリ文字列を作成する方法は?

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

私は、文字列を照会するための配列を追加します。例えば、array('find_loc'=>'New+York', 'find_name'=>'starbucks')

は、私はこれを行うための最善の方法は何ですか?

http://example.com/1/?find_loc=New+York&find_name=starbucksのように見えるURLを取得することを期待しますかURLに文字列を追加することを提案した similar questionが見つかりました。クエリ文字列のヘルパーはありますか?

+0

クエリ文字列http://を構築するphp関数があります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を取得するためとルータ

私は思いますその説明は明確である。ルートとルーターに依存するURLを作成する場合に使用します。だから、あなたの質問に投稿したリンクの推奨としてあなたのクエリ文字列を追加してください。ビューでこのヘルパーを登録した後、上流のコードはdoesnのため、

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

これが最良の方法だと言っていますか? '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 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; 
    } 

} 

のようにそれを使用することができます:あなたはカスタムヘルパー作ることができます

関連する問題