17

にクエリパラメータを追加することができます。どのように私はそうのように、ルートを使ってクエリ文字列をURLを作成しようとしていますZF2/ZF3 URLビューヘルパー

$this->url('users') -> /users 
$this->url('users', ['sort' => 'desc']) -> /users?sort=desc 

ただし、これはしていないようです(2番目のヘルパーは実際には/usersを出力します)。このunofficial, out-of-date documentationによれば、経路名に/queryを追加することでこれを行う方法がありましたが、これはルートが見つからないという例外をもたらします。

現在のURLヘルパーを使用してこれを行うことはできますか?

答えて

11

あなたは、このようなユーザーのルートの子ルートを作成することができます

'users' => array(
    'type' => 'Literal', 
    'options' => array(
     'route' => '/users', 
     'defaults' => array(
      '__NAMESPACE__' => 'User\Controller', 
      'controller' => 'Index', 
      'action' => 'list', 
     ), 
    ), 
    'may_terminate' => true, 
    'child_routes' => array(
     'query' => array(
      'type' => 'Query', 
     ), 
    ), 
), 

、あなたは$this->url('users/query', array('sort' => 'desc'))を組み立てることができます。

may_terminatetrueに設定することを忘れないでください。

+0

ありがとうございます!これは、 'url($ routeName、$ params、true)'を使用して親ルートからパラメータを継承する場合を除いて、デフォルトのコントローラとアクションをクエリパラメータとして追加する場合を除いて動作します。 – Ross

+0

興味深い...他の既存のパラメータも追加しますか?それをまだ使用していませんでしたが、組み立てる前にコントローラーとアクションのパラメーターを解除するためのトリック・アイ・ワカカンドがあります... –

+7

更新されたZF2バージョン – webcoder

57

はバージョン2.1.4以来、あなたは、ユーザーエラー

クエリルートZF 2.1.4で廃止に遭遇します。 HTTPルータ\ 'sの組み立て方法の代わりに

使用例の「クエリ」オプションを使用します。

$name = 'index/article'; 
$params = ['article_id' => $articleId]; 
$options = [ 
     'query' => ['param' => 'value'], 
    ]; 
$this->url($name, $params, $options); 
+11

あなたを祝福してください!これは私を狂ってしまった!あなたのコントローラーでリダイレクトしようとする人は、 '$ this-> redirect() - > toRoute(" index/article "、array(" article_id "=> $ articleId)、array(" query "=> array(" param "=>" value ")))' - これが役立つことを望みます! :) –

8

これは、現在のURLビューヘルパーを使用して行うことができそう。

$this->url('users', [], array('query' => array('sort' => 'desc'))) 

クエリ文字列の子ルートを設定する必要はありません。 「ユーザー」のルート設定がある限り、コントローラの「並べ替え」パラメータを探して、必要な場所で使用するだけです。

関連する問題