17

sto cercando di creare un URL con una stringa di query utilizzando un percorso, in questo modo:Come è possibile aggiungere parametri di query nella ZF2/ZF3 vista url aiutante

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

Tuttavia questo non sembra lavoro (il secondo assistente in realtà produce /users). Secondo questo unofficial, out-of-date documentation c'era una volta un modo per fare questo aggiungendo /query al nome della rotta, tuttavia questo dà un'eccezione route-not-found.

Questo può essere fatto usando l'attuale url helper?

risposta

11

È possibile creare un percorso figlio per il percorso gli utenti in questo modo:

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

allora è possibile assemblare $this->url('users/query', array('sort' => 'desc')).

Non dimenticare di impostare may_terminate su true!

+0

Grazie! Funziona, tranne quando uso 'url ($ routeName, $ params, true)' per ereditare i parametri da un percorso principale, aggiunge il controller e l'azione predefiniti come parametri di query - esiste un modo per evitarlo? – Ross

+0

interessante ... aggiunge anche gli altri parametri esistenti? non lo ha ancora usato, ma forse c'è un trucco per ignorare controller e parametri di azione prima dell'assemblaggio ... –

+7

Nessun altro lavoro nella versione aggiornata ZF2 – webcoder

57

A partire dalla versione 2.1.4 si incontra un errore dell'utente

percorso Query deprecata come di ZF 2.1.4; utilizzare l'opzione "query" del HTTP router metodo di assemblaggio s '\ invece

Esempio di utilizzo:

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

Ti benedica! Questo mi stava facendo impazzire! Per chi cerca di reindirizzare i controller, prova: '$ this-> redirect() -> toRoute (" index/article ", array (" article_id "=> $ articleId), array (" query "=> array (" param "=>" value ")));' - spero che questo aiuti! :) –

8

Questo può essere fatto utilizzando la visualizzazione aiutante corrente URL sì.

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

Non è necessario disporre di installazione di route figlio stringa di query. Finché hai una configurazione di percorso per "utenti", puoi semplicemente cercare il parametro "sort" nel controller e utilizzarlo dove richiesto.

Problemi correlati