17

Estoy intentando crear una URL con una cadena de consulta utilizando una ruta, así:¿Cómo se puede añadir parámetros de consulta en el ZF2/ZF3 vista URL Helper

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

Sin embargo, esto no parece trabajo (el segundo ayudante realmente saca /users). De acuerdo con esto unofficial, out-of-date documentation hubo una forma de hacer esto al agregar /query al nombre de la ruta, sin embargo, esto da una excepción de ruta no encontrada.

¿Se puede hacer esto usando la herramienta url actual?

Respuesta

11

Puede crear una ruta secundaria para sus usuarios ruta así:

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

continuación, se puede montar $this->url('users/query', array('sort' => 'desc')).

No olvides configurar may_terminate en true!

+0

Gracias! Esto funciona, excepto cuando uso 'url ($ routeName, $ params, true)' para heredar los parámetros de una ruta principal, agrega el controlador predeterminado y la acción como parámetros de consulta. ¿Hay alguna forma de evitar eso? – Ross

+0

interesante ... ¿también agrega los otros params existentes? No usé eso todavía, pero tal vez haya algún truco-ish worakound para desarmar los parámetros del controlador y la acción antes de ensamblar ... –

+7

No más de trabajar en la versión actualizada de ZF2 – webcoder

57

Desde la versión 2.1.4 se encuentra con un error del usuario

ruta de consulta obsoleta, ya que de ZF 2.1.4; utilizar la opción "consulta" del router HTTP método de montaje \ 's en lugar

Ejemplo de uso:

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

¡Te bendigo! ¡Esto me estaba volviendo loco! Para cualquiera que quiera redireccionar en sus controladores, intente: '$ this-> redirect() -> toRoute (" index/article ", array (" article_id "=> $ articleId), array (" query "=> array (" param "=>" value ")));' - ¡Espero que esto ayude! :) –

8

Esto se puede hacer usando la URL actual ayudante de vista sí.

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

No necesita tener la cadena de consulta en las rutas de instalación. Siempre que tenga una configuración de ruta para 'usuarios', puede buscar el parámetro 'ordenar' en su controlador y usarlo cuando sea necesario.

Cuestiones relacionadas