[精讚] [會員登入]
1962

[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] 2個程式的觀念 整理2個PHP的程式觀念,參考參考。

[PHP] 字串編碼及解碼函式 為何要將字串編碼?理由很簡單,就是不要讓人家輕易的知道字串內容是什麼。例如點選分頁時,我們常會用這樣的連結: index

[PHP] codeignitor4+ smarty4 這篇整合 php 的framework codeignitor4 + smarty4。

[Centos 6& 7] 安裝php-geoip php-geoip是PHP由domain、ip查詢城市國家資料非常強的函式

[PHP] 取得檔名和路徑:basename, dirname 由絕對路徑取的路徑及檔名的方法

[PHP] 使用FTP PHP 上使用 FTP 的寫法

隨機好文

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

[Windows7] 移除IE10及移除IE11 Windows7 不得已的情況要移除IE11或IE10怎麼做?

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

設計的工作絕不接受比價 拿買陽春麵的價格想買牛肉麵,寧願倒掉也不賣