2010-12-02 44 views
0

有一些參數需要中繼模型。CakePHP1.3上的非模型請求的更好的解決方案

Router::connect("/ctrl/action/:mode/:year"  , 
    array('controller' => 'ctrl', 'action' => 'action'), 
    array('mode' => 'modea|modeb', 'year' => '[12][0-9]{3}')); 

如何驗證和消毒?

我應該創建虛擬模型嗎? 或在組件上實現?

+0

何時/何地/爲什麼/如何以及最重要*您需要在此處驗證什麼* – deceze 2010-12-02 01:46:33

回答

1

那麼,您當前的路線不會匹配/ctrl/action/modea/5010,因此它會轉到另一條路線,很可能是標準路線,它會將請求發送到Ctrl_controller::action('modea', 5010)。即你基本上有相同的結果。

要做的最好的事情可能就是跳過這條路線,因爲它不會真正將任何路線發送到任何地方。就在你的控制器動作驗證使用前值:

function action($mode, $year) { 
    if (!in_array($mode, array('modea', 'modeb')) || $year < 1900 || 3000 < $year) { 
     $this->cakeError('error404'); 
    } 
    ... business as usual ... 
} 

或者:

function action($mode, $year) { 
    switch ($mode) { 
     case 'modea' : 
      ... 
      break; 
     case 'modeb' : 
      ... 
      break; 
     default : 
      $this->cakeError('error404'); 
    } 
} 

或其一些組合。除非$mode$year變量與您的數據庫/模型有關,否則您不想爲其創建模型。模型進行驗證,因爲在將東西放入數據庫之前這是一個重要的步驟,但這並不意味着它們是可以或應該進行驗證的唯一應用程序部分。