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

ZF2 - Controller managing route with and without params

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

目前我有一个这样的路由器:

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

因此,当我的 url 包含 ../stock/13567/2312 时,参数会传递到 checkAction 函数中。

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

谢谢。

只需扩充正则表达式以将参数标记为可选,如 the docs:

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

...并且不要忘记提供明确的默认值:

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

如果您想根据是否传递 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;
}