[精讚] [會員登入]
1525

[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

你可能感興趣的文章

[PHP7] 利用Memcached 儲存 Session Memcached+ PHP7,利用Memcached 儲存 Session。

[CodeIgniter 3] 資料庫的使用方法整理1/2 --Select的使用 [CodeIgniter 3] 資料庫的使用方法整理:Select的使用

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

[PHP] 移除檔案的UTF8 BOM 移除檔案的UTF8 BOM

[PHP] 命名空間 namespace及 use PHP >=5.3 開始支援命名空間:namespace

PHP 產生連續的日期 要用PHP產生連續的日期,連續月份

我有話要說

>>

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

訪客留言

[無留言]

隨機好文

HP SAS硬碟leds燈號說明 HP SAS硬碟leds燈號(hp g7/g6系統適用)說明

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

[JAVA] JWS, JWT, JWE, JOSE是什麼? [JAVA] JWS, JWT, JWE, JOSE是什麼?非常的複雜,儘量來搞清楚..

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

最值得學的電腦技能 什麼是最值得學的電腦技能?程式設計?美工繪圖?系統網路?還是…? 都不是!個人覺得一個最值得學的電腦技能就