Я использую 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);
}