web-dev-qa-db-ja.com

ZF2 / ZF3 URLビューヘルパーにクエリパラメーターを追加するにはどうすればよいですか

次のように、ルートを使用してクエリ文字列でURLを作成しようとしています:

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

ただし、これは機能していないようです(2番目のヘルパーは実際には/usersを出力します)。これによると 非公式、古いドキュメント ルート名に/queryを追加してこれを行う方法がかつてありましたが、これはルートが見つからないという例外を与えます。

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

21
Ross

次のように、ユーザールートの子ルートを作成できます。

_'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_terminate_をtrueに設定することを忘れないでください!

10
Andreas Linden

バージョン2.1.4以降、ユーザーエラーが発生します

クエリルートはZF 2.1.4で非推奨になりました。代わりに、HTTPルーターのアセンブル方法の「クエリ」オプションを使用してください

使用例:

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

これは、現在のURLビューヘルパーを使用して実行できます。

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

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

11
Matthew Fedak