How can you add query parameters in the ZF2 / ZF3 url view helper
I'm attempting to create a url with a query string using a route, like so:
$this->url('users') -> /users $this->url('users', ['sort' => 'desc']) -> /users?sort=desc
However this doesn't seem to work (the second helper actually outputs /users). According to this unofficial, out-of-date documentation there was once a way to do this by appending /query to the route name, however this gives a route-not-found exception.
Can this be done using the current url helper?
You can create a child route for your users route like this:
'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', ), ), ),
then you can assemble $this->url('users/query', array('sort' => 'desc')).
Don't forget to set may_terminate to true!
Since version 2.1.4 you come across user error
Query route deprecated as of ZF 2.1.4; use the "query" option of the HTTP router\'s assembling method instead
$name = 'index/article'; $params = ['article_id' => $articleId]; $options = [ 'query' => ['param' => 'value'], ]; $this->url($name, $params, $options);
This can be done using the current URL view helper yes.
$this->url('users', , array('query' => array('sort' => 'desc')))
You do not need to have query string child routes setup. As long as you have a route setup for 'users', you can just look for the 'sort' param in your controller and use where required.