2017-03-07 142 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; 
}