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?

Answers


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

Usage example:

$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.


Need Your Help

entity object cannot be referenced by multiple instances of IEntityChangeTracker. while adding related objects to entity in Entity Framework 4.1

c# asp.net entity-framework ado.net foreign-keys

I am trying to save Employee details, which has references with City. But everytime I try to save my contact, which is validated I get the exception "ADO.Net Entity Framework An entity object canno...

Add directory to path globally on ubuntu server

ubuntu path

How can I add my own directory to PATH without editing my local profile's .bash_profile or .bashrc?