簡體   English   中英

codeigniter 3.0 自定義 404 未找到錯誤頁面

[英]codeigniter 3.0 custom 404 not found error page

我的問題是關於升級到 Codeigniter 3.0 后的自定義錯誤頁面。

我曾經有一個處理網站 404 錯誤頁面的Errors控制器 - 在這個控制器上我定制了頁面的某些部分,例如如果用戶登錄,它在導航欄上顯示用戶名等(是的,在404 錯誤頁面)

升級到 CI 3.0 后,我注意到錯誤頁面在不同的文件夾中處理,我開始遷移到這種方式; 但問題是我無法將任何變量加載到此頁面,例如會話變量,甚至無法在這些頁面上使用任何 CI 的功能。

我認為這個頁面應該只是 HTML 頁面,但是有沒有辦法將變量加載到這些錯誤頁面?

您需要在application/config/routes.php中設置以下路由

$route['404_override'] = 'my404';

然后你需要在你的控制器目錄(application/controllers/)中創建一個新的控制器

<?php 
class My404 extends CI_Controller 
{
 public function __construct() 
 {
    parent::__construct(); 
 } 

 public function index() 
 { 
    $this->output->set_status_header('404'); 
    $this->load->view('err404');//loading in custom error view
 } 
} 

並創建一個err404視圖。 就這樣!

參考: 預留路線

它在 codeigniter 3 中不起作用,我覆蓋了默認視圖( application/views/errors/html/error_404.php )並添加了我的自定義視圖,現在show_404()工作正常。

這很好用,但如果重定向到錯誤,例如 404 和函數 show_404,你的控制器將不會加載你的視圖,對於 show_404 方法中的真正 404,你必須轉到 codeigniter 的核心並觸摸它。

\系統\核心\Common.php

這是一個代碼示例:

function show_404(){
  $ci = get_instance();
  $ci->output->set_status_header(404);
  $ci->load->view('errors/error404_view');
  echo $ci->output->get_output();
  exit(4);
}

在 Codeigniter 3 中,我沒有調用show_404() ,而是重定向到自定義錯誤控制器函數。

例如對於上述場景

if (404 condition...) {
    redirect("my404");
}

要使用 show_404 () 函數,您無需訪問 CI 核心並更改它們的通話方式。 只需使用$CI->load->view(...)使標准 404 視圖加載您的 404 視圖

這將保留請求的原始 404 代碼,並且不會進行不必要的重定向或核心更改。

$CI =& get_instance();
$CI->load->view('error-404');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM