2017-03-07 145 views
0

我正在用zf2写一个应用程序,我来到这个问题上,我不知道如何实现。ZF2 - 控制器管理带和不带参数的路由

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

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

所以,当我的网址包含../stock/13567/2312的参数被传递到checkAction功能。

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

谢谢。

回答

1

只是增加了正则表达式来标记帕拉姆为可选,如the docs

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

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

'defaults' => [ 
    'controller' => MyController::class, 
    'action' => 'check', 
    'sku' => '' // or else 
], 
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; 
}