ZF2 - 控制器管理有和没有参数的路由

时间:2017-03-07 09:53:21

标签: php zend-framework2

我正在使用zf2编写应用程序,我遇到了这个我不知道如何实现的问题。

目前我有这样的路由器:

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

因此,当我的网址包含../stock/13567/2312时,参数会传递给checkAction函数。

但是,当网址只是../stock/或../stock而没有发送任何参数时,我想显示不同的内容。我怎样才能做到这一点?

感谢。

2 个答案:

答案 0 :(得分:2)

如果您希望根据sku参数的传递显示不同的内容,您可以在控制器中执行以下操作:

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;
}

答案 1 :(得分:1)

只需增加正则表达式,将param标记为可选,就像在the docs中一样:

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

...并且不要忘记提供显式默认值:

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