[英]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.