Я пытаюсь создать URL-адрес с строкой запроса с использованием маршрута, например:
$this->url('users') -> /users $this->url('users', ['sort' => 'desc']) -> /users?sort=desc
Однако это не работает (второй помощник фактически выводит /users
). Согласно этой неофициальной, устаревшей документации, когда-то был способ сделать это, добавив /query
к имени маршрута, однако это дает исключение, не найденное маршрутом.
Можно ли это сделать с помощью текущего помощника URL?
Вы можете создать дочерний маршрут для своего пользователя следующим образом:
'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
!
Начиная с версии 2.1.4 вы сталкиваетесь с ошибкой пользователя
Маршрут запроса устарел с ZF 2.1.4; вместо этого используйте параметр «запрос» для метода сборки HTTP-маршрутизатора
Пример использования:
$name = 'index/article'; $params = ['article_id' => $articleId]; $options = [ 'query' => ['param' => 'value'], ]; $this->url($name, $params, $options);
Это можно сделать с помощью текущего помощника просмотра URL да.
$this->url('users', [], array('query' => array('sort' => 'desc')))
Вам не нужно настраивать дочерние маршруты строки запроса. Пока у вас есть настройка маршрута для «пользователей», вы можете просто искать параметр «sort» в своем контроллере и использовать там, где это необходимо.