CI3 有找不到網頁,也就是page404的樣板,當不存在的路由(route)出現,就會導到這個頁面,預設他的路徑是在
∟ cli/
∟ html/
裡面有幾個樣版檔,其中 error_404.php 就是找不到頁面的樣版,可以依需求編修(例如中文化)
除了CI3自己因為路徑找不到自己叫用樣板外,也可以使用指令來產生:
show_404();
但是往往我有其他的需求:我希望這個頁面是套用我自己網站的模版,不想用預設的這個頁面,我又不想改這個預設的樣版,因為他和我用的樣版不一樣(ie.就是不想用啦)
修改找不到404的頁面有兩個方法:
一、修改核心檔
二、修改設定檔
第一個方法比較複雜,但是可以做很多的應用,例如要使用者出現404或其他錯誤時,寄email通知你都可以;第二個方法簡單,只適用於404這個錯誤。
一、修改核心檔
直接使用複寫功能修改CI3的核心:
進到核心的目錄
$ cd application/core/
建立自己的核心
$ touch MY_Exceptions.php
內容範例如下:
// 請依[1]的規則來命名 class MY_Exceptions extends CI_Exceptions{ public function __construct() { parent::__construct(); } // 覆寫你自己專屬的404頁面,在這裡可以使用自己的樣版引擎(例如smarty) public function show_404($page = '', $log_error = TRUE) { $heading = 'Not Found'; if (is_cli()){ $message = 'The controller/method pair you requested was not found.'; echo $this->show_error($heading, $message, 'error_404', 404); } else { include APPPATH. "libraries/smarty-3.1.27/libs/Smarty.class.php"; $view = new Smarty(); // view的方式 } // By default we log this, but allow a dev to skip it if ($log_error) { log_message('error', $heading.': '.$page); } exit(4); // EXIT_UNKNOWN_FILE } }
12行用了is_cli()去判斷是不是command line來的頁面
19行就是你使用smarty的方式,這裡略,僅告訴讀者說可寫在這。
22-26行是原本CI3處理的方式,可依需求修改
二、修改設定檔
修改404的路由 /application/config/routes.php
寫法:
my-controller/my-method -> my_controller/my_method
例如:
$route['404_override'] = 'index/show404';
參考資料
[1] CI2 的core overwrite文件,cI3也適用
原文 2016-03-06 20:37:48