17

Ich bin versucht zu erstellen eine URL mit einer Abfragezeichenfolge mit einer Route, wie so hinzufügen:Wie können Sie Abfrageparameter in den ZF2/ZF3 url View Helfern

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

Dies gilt jedoch nicht scheinen Arbeit (der zweite Helfer gibt tatsächlich /users aus). Nach dieser unofficial, out-of-date documentation gab es einmal eine Möglichkeit, dies zu tun, indem Sie /query an den Routennamen anhängen, jedoch ergibt dies eine Route-nicht-gefundene Ausnahme.

Kann dies mit dem aktuellen URL-Helper gemacht werden?

Antwort

11

Sie können ein Kind Route für Ihre Benutzer Route wie folgt erstellen:

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

dann Sie $this->url('users/query', array('sort' => 'desc')) zusammenstellen können.

Vergessen Sie nicht may_terminate auf true zu setzen!

+0

Danke! Das funktioniert, außer wenn ich 'url ($ routeName, $ params, true)' verwende, um Parameter von einer übergeordneten Route zu übernehmen, fügt es den Standard-Controller und die Aktion als Abfrageparameter hinzu - gibt es eine Möglichkeit, das zu vermeiden? – Ross

+0

interessant ... fügt es auch die anderen vorhandenen params hinzu? habe das noch nicht benutzt, aber vielleicht gibt es noch ein paar Tricks, um den Controller und die Action-Parameter zu deaktivieren ... –

+7

In der aktualisierten ZF2-Version – webcoder

57

Seit Version 2.1.4 kommen Sie über einen Benutzerfehler

Query-Route als von ZF veraltet 2.1.4; Verwenden Sie die "Abfrage" Option der HTTP-Router \ 's Montageverfahren statt

Anwendungsbeispiel:

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

Segne dich! Das hat mich verrückt gemacht! Für alle, die in Ihren Controllern umleiten möchten, versuchen Sie: '$ this-> redirect() -> toRoute (" index/article ", array (" article_id "=> $ articleId), array (" query "=> array (" param "=>" Wert ")));" - hoffe das hilft! :) –

8

Dies kann getan werden, die aktuelle URL View Helfer mit ja.

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

Sie müssen keine Query-Setups für die Abfragezeichenfolge erstellen. Solange Sie eine Route für "Benutzer" eingerichtet haben, können Sie einfach nach dem Parameter "sort" in Ihrem Controller suchen und wo erforderlich verwenden.