CakePHP:强制小写动作名称?

时间:2012-03-22 21:25:28

标签: cakephp

我正在使用CakePHP 2.1.0,我注意到如果你想访问控制器的动作,那么你使用什么外壳作为动作名称并不重要;你将始终在控制器中击中该动作。但是,操作将期望视图文件的命名方式与您用于访问操作的外壳相同。因此,如果我要转到http://example.com/users/aDd,我会按预期命中“用户”控制器的“添加”操作中的代码,但它会查找不存在的aDd.ctp。有没有办法让它只有在小写时才能访问动作名称,否则它们被认为是错误的URL?

更新:我认为在CakePHP级别而不是在Web服务器级别上执行此操作是最安全的。这样,无论出于何种原因,如果您想让http://example.com/FoO无效,而不希望http://example.com/barhttp://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);
}

1 个答案:

答案 0 :(得分:1)

好。您AppController中的这些行怎么样:

public function beforeFilter() {
  $this->view = strtolower($this->view);
}