phpzend-framework2zend-framework3zend-framework-routing

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?


Solution

  • 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!