ZF1 默認 Controller/Action **區分大小寫**,且 URL 映射規則固定:
`CoderBlogAction` → `/controller/coder-blog/`(大寫字母前加連字符)。
這導致兩個痛點:
// Bootstrap.php 或 application.ini
$front = Zend_Controller_Front::getInstance();
$front->setParam('useCaseSensitiveActions', true);
效果:Action 名稱保留大小寫,路由匹配時區分大小寫。
在基礎 Controller 的 `init()` 中強制轉換:
class App_Controller_Action extends Zend_Controller_Action {
public function init() {
// 統一轉小寫,URL 不再區分大小寫
$request = $this->getRequest();
$request->setModuleName(strtolower($request->getModuleName()));
$request->setControllerName(strtolower($request->getControllerName()));
$request->setActionName(strtolower($request->getActionName()));
}
}
// 所有業務 Controller 繼承此基類
class IndexController extends App_Controller_Action {
public function CoderBlogAction() { /* ... */ }
}
useCaseSensitiveActions = true 讓路由器保留原始大小寫class App_Controller_Router_Standard extends Zend_Controller_Router_Route_Module {
public function match($path, $partial = false) {
$path = strtolower($path); // 全路徑小寫匹配
return parent::match($path, $partial);
}
public function assemble($data = [], $reset = false, $encode = false) {
// 組裝 URL 時自動轉小寫 + 連字符
foreach (['module', 'controller', 'action'] as $key) {
if (isset($data[$key])) {
$data[$key] = strtolower($data[$key]);
}
}
return parent::assemble($data, $reset, $encode);
}
}
// 註冊路由器
$front->setRouter(new App_Controller_Router_Standard());
通過 啟用大小寫敏感參數 + Request 預處理轉小寫,完美解決 ZF1 駝峰命名與 URL 大小寫衝突問題,兼顧開發習慣、SEO 最佳實踐與用戶體驗。建議封裝為基礎 Controller/Router 組件,項目初期即引入。