web-dev-qa-db-fra.com

Comment pouvez-vous ajouter des paramètres de requête dans l'assistant de visualisation d'URL ZF2 / ZF3

J'essaie de créer une URL avec une chaîne de requête en utilisant un itinéraire, comme ceci:

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

Cependant, cela ne semble pas fonctionner (le deuxième assistant génère en fait /users). Selon cela documentation non officielle et obsolète il était une fois possible de le faire en ajoutant /query au nom de la route, mais cela donne une exception de route introuvable.

Cela peut-il être fait en utilisant l'assistant url actuel?

21
Ross

Vous pouvez créer un itinéraire enfant pour l'itinéraire de vos utilisateurs comme ceci:

'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',
        ),
    ),
),

alors vous pouvez assembler $this->url('users/query', array('sort' => 'desc')).

N'oubliez pas de régler may_terminate Sur true!

10
Andreas Linden

Depuis la version 2.1.4, vous rencontrez une erreur utilisateur

Route de requête déconseillée à partir de ZF 2.1.4; utilisez plutôt l'option "requête" de la méthode d'assemblage du routeur HTTP

Exemple d'utilisation:

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

Cela peut être fait en utilisant l'assistant de vue URL actuel oui.

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

Vous n'avez pas besoin de configurer les itinéraires enfants de la chaîne de requête. Tant que vous avez une configuration d'itinéraire pour les "utilisateurs", vous pouvez simplement rechercher le paramètre "trier" dans votre contrôleur et l'utiliser si nécessaire.

11
Matthew Fedak