ZF2: using url helper and reuse query parameters

2020-04-30 01:50发布

I'm trying to reuse query params using Url helper in a view. This is my current url:

http://localhost/events/index?__orderby=name&__order=asc

I'm using this code in the view:

$this->url('events/index', array('__page' => '2'), true);

I want to obtain this url:

http://localhost/events/index?__orderby=name&__order=asc&__page=2

But instead i get this:

http://localhost/events/index?controller=Application\Controller\Events&__page=2

This is my route inside module.config.php file:

'events' => array(
    'type' => 'segment',
    'options' => array(
        'route' => '/eventos[/:action]',
        'constraints' => array(
            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
        ),
        'defaults' => array(
            'controller' => 'Application\Controller\Events',
            'action' => 'index',
        ),
    ),
    'may_terminate' => true,
    'child_routes' => array(
        'index' => array(
            'type' => 'Query',
        ),
    ),
),

What am i doing wrong? Thanks for your help.

2条回答
劫难
2楼-- · 2020-04-30 02:15

You could use something like this, but the query parameters arent reused in my case.

$this->url(
    'page/query',
    array(),
    array(
        'query' => array(
            'name'=>'my-test-page',
            'format' => 'rss',
            'limit' => 10,
        )
    ),
    true
);

So if you want to reuse query parameters you coul merge them with your new ones and then add all of them to the query array (3 parameter).

查看更多
不美不萌又怎样
3楼-- · 2020-04-30 02:34

I think what you are looking for is a Query route type to capture the Query string for you as a child route:

'route' => array(
    'type'    => 'literal',
    'options' => array(
        'route'    => 'page',
        'defaults' => array(
        ),
    ),
    'may_terminate' => true,
    'child_routes'  => array(
        'query' => array(
            'type' => 'Query',
            'options' => array(
                'defaults' => array(
                    'foo' => 'bar'
                )
            )
        ),
    ),

You can then use the view helper to generate and append the query string for you. If you don't use a Query child route, then the helper will just ignore your query string.

$this->url(
    'page/query',
    array(
        'name'=>'my-test-page',
        'format' => 'rss',
        'limit' => 10,
    )
);

You can then set the third parameter to TRUE and allow the helper to use the current parameters as you are trying to do in your example.

There's examples in the docs:

http://framework.zend.com/manual/2.0/en/modules/zend.mvc.routing.html

查看更多
登录 后发表回答