2015-04-29 24 views
2

我使用的是最新的爾康版本,我發現很難找到如何做時所需的參數缺少如下圖所示爾康URL參數丟失,但行動仍得到執行

class TestController extends ControllerBase{ 

public function detailsAction($id) { 
     $this->view->SetVar('theid',$id); 
    } 
} 
動作不執行信息

當我訪問此如下

http://localhost/phalcon/test/details 

的觀點仍然得到執行,但ID丟失,當我通過

http://localhost/phalcon/test/details/5 
訪問

我得到值5。

有人可以告訴我如何將它作爲「NotFound」或什麼時候缺少所需的參數。而且我有很多這樣的需求功能,所以如果在路由中有一個常規設置,或者如果有人可以幫助我,我真的很感激。

謝謝你們

+0

你能告訴我們你的路由配置嗎? – antonienko

+0

路由器是默認的。沒有額外的 – user1217974

回答

1

你可以攔截調度事件beforeExecuteRoute和使用您的目標方法的一些反思:

 if ($event->getType() == 'beforeExecuteRoute') { 
      $cn = $dispatcher->getNamespaceName().'\\'.$dispatcher->getHandlerClass(); 
      $r = new ReflectionMethod($cn, $dispatcher->getActiveMethod()); 
      $method_params = $r->getParameters(); 
      $url_pars = $dispatcher->getParams(); 
      $pass = true; 
      $i = 0; 
      foreach ($method_params as $param) { 
       if(!$param->isOptional() && !isset($url_pars[$i++])) { 
        $pass = false; 
       } 
      } 
      if(!$pass) { 
       return $dispatcher->forward(array('controller' => 'error', 'action' => 'route404')); 
      } 
      return true; 
     } 

這段代碼是調度服務。

當你沒有爲它沒有一個默認值的每個動作參數GET參數(isOptional是虛假的,這種情況下)$pass變量設置爲false,你會被路由到404

這是一種情況,當然,更復雜的情況會讓你更細粒度的控制。