我正在使用CakePHP 2.1.0,我注意到如果你想访问一个控制器的动作,那么它与动作名称使用什么套管无关;您将始终在控制器中执行该操作。但是,该操作会期望视图文件的名称与您用于访问该操作的外观相同。因此,如果我要去http://example.com/users/aDd,我会像预期的那样点击“用户”控制器的“添加”操作中的代码,但它会查找不存在的dd.ctp。有没有一种方法可以使动作名称只能在小写的情况下才能被访问,否则他们会被认为是错误的URL?CakePHP:强制小写动作名称?
更新:我认为在CakePHP级别而不是Web服务器级别上执行此操作是最安全的。这样,如果无论出于何种原因,您希望http://example.com/FoO无论如何都是有效的,但是您希望http://example.com/bar和http://example.com/users/add只能在小写时可访问,您可以这样做。
有谁看到在添加此的“应用程序”控制器“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);
}
在这种情况下,我认为这将是友好的,只是添加几行代码是让控制器加载小写版本(add.ctp);一个好处就是在浏览器中重写URL,以使它更漂亮。 – starlocke 2012-03-22 21:42:33
只是一个猜测,你可能可以用某种方式在路由器定义中找到它们,参见http://book.cakephp.org/2.0/en/development/routing.html。或者,如果这不起作用,总是有mod_rewrite或类似的,这取决于你的网络服务器。 – 2012-03-22 21:42:34
如果您始终以小写形式在视图中构建链接,那么谁会以不同的方式访问您的网站?我不确定它是否值得在每个请求上运行此代码以实现有用功能,可能是一次或两次? – nIcO 2012-03-23 22:19:31