[精讚] [會員登入]
1848

[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] CodeIgniter 3+pure+smarty安裝及環境設置2/2 PHP framework CodeIgniter 3+ pure CSS +smarty Template Engine的整合#2

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

[PHP+ci4] codeignitor4 Cache 及 Session 使用 memcached php 的framework codeignitor4 中的cache和session使用memcached

[CodeIgniter 3] 取得controller和method的方法 CodeIgniter 3 取得controller和method的方法

[PHP] 解析二進位圖片 使用php來解析png圖片,把資料寫在16進位格式

[PHP] 台灣身分證號及檢查程式 台灣身分證號及PHP檢查程式

隨機好文

[jQuery] textarea 的取值和給值 HTML 的 TEXTAREA 標籤若要用 jquery 取值,不能使用 .text() 或 .html() ,使用 .

談借錢 人借錢時手心向上頭向下,人還錢時手心向下頭向上

[jQuery] select 元件的取值及給值 html中的元件select,在jquery中要如何使用?

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

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