あなたの現在のルートは/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
の変数がデータベース/モデルと何らかの関係がない限り、モデルを作成したくありません。モデルは検証を行います。なぜなら、これはデータベースに物を入れる前の重要なステップですが、検証ができる唯一の部分であるというわけではありません。
いつ、どこで/なぜ/どのように、そして何よりも*ここで検証する必要がありますか? – deceze
ありがとうございます。ユーザーが/ ctrl/action/modec/5010にアクセスすると間違っている場合、リクエストを検証し、modec => modea(デフォルト)5010 => date( 'Y'):-)に変換してください – freddiefujiwara