有一些参数没有中继模型。
Router::connect("/ctrl/action/:mode/:year" ,
array('controller' => 'ctrl', 'action' => 'action'),
array('mode' => 'modea|modeb', 'year' => '[12][0-9]{3}'));
如何验证和消毒?
我应该创建虚拟模型吗? 或在组件上实施?
答案 0 :(得分: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
变量与您的数据库/模型有任何关系,否则您不希望为其创建模型。模型进行验证,因为这是将内容放入数据库之前的重要步骤,但这并不意味着它们是应用程序中唯一可以或应该进行验证的部分。