我正在使用CakePHP 2.1.0,我注意到如果你想访问控制器的动作,那么你使用什么外壳作为动作名称并不重要;你将始终在控制器中击中该动作。但是,操作将期望视图文件的命名方式与您用于访问操作的外壳相同。因此,如果我要转到http://example.com/users/aDd,我会按预期命中“用户”控制器的“添加”操作中的代码,但它会查找不存在的aDd.ctp。有没有办法让它只有在小写时才能访问动作名称,否则它们被认为是错误的URL?
更新:我认为在CakePHP级别而不是在Web服务器级别上执行此操作是最安全的。这样,无论出于何种原因,如果您想让http://example.com/FoO无效,而不希望http://example.com/bar和http://example.com/users/add仅在小写的情况下可以访问,那么您可以这样做。
有没有人看到将此添加到“App”控制器的“beforeFilter”方法中的缺陷?:
if ($this->request->params['controller'] != strtolower($this->request->params['controller']) || $this->action != strtolower($this->action)) {
$redirect = Router::url(array(
'controller' => strtolower($this->request->params['controller']),
'action' => strtolower($this->action)
) + $this->request->params['pass']);
foreach ($this->request->params['named'] as $key => $value) {
$redirect .= "/$key:$value";
}
$this->redirect($redirect);
}
答案 0 :(得分:1)
好。您AppController
中的这些行怎么样:
public function beforeFilter() {
$this->view = strtolower($this->view);
}