2010-12-02 12 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

+0

ありがとうございます。ユーザーが/ ctrl/action/modec/5010にアクセスすると間違っている場合、リクエストを検証し、modec => modea(デフォルト)5010 => date( 'Y'):-)に変換してください – freddiefujiwara

答えて

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の変数がデータベース/モデルと何らかの関係がない限り、モデルを作成したくありません。モデルは検証を行います。なぜなら、これはデータベースに物を入れる前の重要なステップですが、検証ができる唯一の部分であるというわけではありません。

関連する問題