CakePHP: форсировать имена действий в нижнем регистре? - PullRequest
2 голосов
/ 23 марта 2012

Я использую CakePHP 2.1.0 и заметил, что если вы хотите получить доступ к действию контроллера, то не имеет значения, какой корпус вы используете для имени действия; вы всегда будете нажимать это действие в контроллере. Однако действие будет ожидать, что имя файла представления будет иметь тот же регистр, который вы использовали для доступа к действию. Поэтому, если бы я перешел на http://example.com/users/aDd,, я бы нажал код в действии «Добавить» контроллера «Пользователи», как и ожидалось, но он бы искал aDd.ctp, который не существует. Есть ли способ сделать так, чтобы к именам действий можно было обращаться только в том случае, если они строчные, или их считают неверным URL?

ОБНОВЛЕНИЕ: Я думаю, что безопаснее всего делать это на уровне CakePHP, а не на уровне веб-сервера. Таким образом, если по какой-либо причине вы хотите, чтобы http://example.com/FoO был действительным независимо от регистра, но вы хотите, чтобы http://example.com/bar и http://example.com/users/add были доступны только в нижнем регистре, вы можете сделай это.

Кто-нибудь видит недостаток в добавлении этого в метод "beforeFilter" контроллера "App"?:

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 Ответ

1 голос
/ 23 марта 2012

Хорошо. Как насчет этих строк в вашем AppController:

public function beforeFilter() {
  $this->view = strtolower($this->view);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...