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;
}
我正在用 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;
}