我正在使用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