[精讚] [會員登入]
1699

[CodeIgniter 3] 自寫找不到頁面(page404)的方法

使用CI3框架中如果找不到頁面,就會導到一個自定的404頁面,該怎麼做?

分享此文連結 //n.sfs.tw/10327

分享連結 [CodeIgniter 3] 自寫找不到頁面(page404)的方法@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-19 17:40:04 最後編修
2016-11-30 21:06:55 By 張○○
 

CI3 有找不到網頁,也就是page404的樣板,當不存在的路由(route)出現,就會導到這個頁面,預設他的路徑是在

/application/views/errors
  ∟ 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

END

你可能感興趣的文章

[PHP] 位元運算 (Bitwise operation)及和PERL比較 PHP 的位元運算,及和PERL比較整理

[PHP] 隨機產生一個顏色字串 讓PHP 隨機產生一個顏色字串

設定Google analytics API #3 -- 查詢範例 讓你的網站能夠存取你的Google analytics上面的資料

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

[PHP] IPv6檢查IP是否在某個網段內 mtachcidr6 要檢查IPv6是否在某個IPv6的網段內?

[PHP] 讀取作業系統程式執行結果 PHP讀取作業系統程式執行結果

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[札記] 2016.7~12月札記 札記,只是札記

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很

[Apache] 自訂錯誤頁面及移掉歡迎頁 Apache 有一個歡迎頁,以正式網站來說,出現這頁有點不專業,該移除它..