我正在使用zf2编写应用程序,我遇到了这个我不知道如何实现的问题。
目前我有这样的路由器:
'routes' => [
'stock' => [
'type' => 'regex',
'options' => [
'regex' => '/stock(?<sku>\/.*)',
'defaults' => [
'controller' => MyController::class,
'action' => 'check',
],
'spec' => '/path%path%'
],
因此,当我的网址包含../stock/13567/2312时,参数会传递给checkAction函数。
但是,当网址只是../stock/或../stock而没有发送任何参数时,我想显示不同的内容。我怎样才能做到这一点?
感谢。
答案 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
],