ThinkPHP 提供 _empty 操作與 EmptyAction 空模組機制,優雅處理「操作不存在」與「模組不存在」的 404 情況,避免拋出預設錯誤頁面,提升用戶體驗與 SEO 友善度。
當訪問的 Action 方法不存在時,自動觸發控制器中的 _empty($name) 方法:
<?php
class IndexAction extends Action {
public function _empty($name) {
// $name 為嘗試訪問的不存在方法名
$this->error("$name 操作不存在 <a href='__APP__/Index/index'>返回首頁</a>");
}
}
?>
當訪問的模組不存在時,框架自動尋找 EmptyAction 類別:
<?php
class EmptyAction extends Action {
public function index() {
// 獲取 URL 中的模組名(即城市名、專題名等)
$name = MODULE_NAME;
// 通用邏輯:查詢城市資料
$city = M('City');
$list = $city->select();
$this->assign('list', $list);
// 動態載入對應模板:City:城市名
$this->display("City:$name");
}
}
?>
/beijing/、/shanghai/、/guangzhou/EmptyAction::index() 統一處理,根據 MODULE_NAME 動態渲染模板Tpl/City/beijing.html、Tpl/City/shanghai.html...header('HTTP/1.0 404 Not Found'); 利於 SEOMODULE_NAME 取得的是 URL 解析出的模組名(區分大小寫視配置而定)