简体   繁体   中英

ZF2 - Controller managing route with and without params

I am writting an application with zf2 and I came to this issue which I don't know how to implement.

At the moment I have a router like this :

'routes' => [
        'stock' => [
            'type'    => 'regex',
            'options' => [
                'regex' => '/stock(?<sku>\/.*)',
                'defaults' => [
                    'controller' => MyController::class,
                    'action' => 'check',
                ],
                'spec' => '/path%path%'
            ],

So when my url contains ../stock/13567/2312 the parameter gets passed into the checkAction function.

However, I would like to show a different content when the url is just ../stock/ or ../stock without any parameter sent. How can I achieve this ?

Thanks.

If you want to show different content depending if sku parameter is passed you can do following thing in your controller:

public function indexAction()
{
    // Return sku parameter if exists, false otherwise
    $sku = $this->params('sku', false);

    if ($sku) {
        // For example get single item
        ...
        $view->setTemplate('template-a');
    } else {
        // Get all items
        ...
        $view->setTemplate('template-b');
    }

    return $view;
}

Just augment the regex to mark the param as optional, as in the docs :

'regex' => '/stock(?<sku>\/.*)?'

... and don't forget to provide the explicit default value:

'defaults' => [
  'controller' => MyController::class,
  'action' => 'check',
  'sku'    => '' // or else
],

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM