[精讚] [會員登入]
1879

[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] 輸出EXCEL的最簡易方法 輸出EXCEL最簡易方法,就沒要求太多了

[CodeIgniter 3] 修改或插入資料時遇到函數的處理 CI3 中要新增或修改的資料中如果有 now()這類的函數,要怎麼處理?

[CI3] 使用和修改日曆類別 calendar library CI3有一個日曆圖書館 library,可以快速的建立一個日曆,但是想修改讓他更棒

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

[phpmyadmin] 錯誤:您應升級到 MySQL 5.5.0 或更新版本 使用phpmyadmin4出現錯誤:您應升級到 MySQL 5.5.0 或更新版本的解決方式

[PHP] CodeIgniter 3+pure+smarty安裝及環境設置2/2 PHP framework CodeIgniter 3+ pure CSS +smarty Template Engine的整合#2

隨機好文

[Freebsd] 使用 ADSL 撥接上網 Freebsd上要使用 ADSL 撥接上網,該如何設定?

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

[PHP] 檢查IP是否在某個網段內 mtachcidr 要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

[AS3] FLASH 引入外部as檔 FLASH AS3中,若要引用另外撰寫的 class(*.as) 檔案,該如何處理?

網頁的標頭(head)搜尋引擎和FB最佳化 網頁的標頭(head)搜尋引擎和facebook最佳化