私の問題は、Codeigniter3.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()
は正常に機能しています。
これは正常に機能していますが、エラー(たとえば、関数show_404を含む404)にリダイレクトすると、コントローラーはビューをロードしません。show_404メソッドの実際の404の場合、codeigniterのコアに移動してタッチする必要があります。
\ system\core\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);
}