2009-05-11 11 views
5

CodeIgniterの/system/application/errors/error_404.phpには、実際には「コントローラが見つかりません」という条件のために404がある場合に表示されます。しかし、私のプロジェクトでは、コントローラクラスにメソッドがないときと同じように、このエラーを本当に処理する必要があります。その場合、私はかなりの「ページが見つかりませんでした:おそらくあなたはこれを意味しましたか?」というページで、データベース生成のナビゲーションなどを含む通常のビューを表示します。CodeIgniterに適切なエラー404ハンドラを作成するにはどうすればよいですか?

私は2つのこと:

  1. それを処理するためのデフォルトルータのいくつかの種類を追加し、既存の(または特別な)コントローラの404ハンドラ
  2. にリダイレクトするheader("Location: /path/to/error_page")コールを作成します。

必要な結果を得るにはどのような方法が最適ですか?注意すべき落とし穴はありますか?

答えて

2

私はSmartyでCodeIgniterを使用しています。 Smartyクラスのnotfound()という別の関数があります。 notfound()を呼び出すと、正しいヘッダー位置が404ページに設定され、404テンプレートが表示されます。テンプレートには、オーバーライド可能なタイトルとメッセージがあり、非常に汎用性があります。ここではいくつかのサンプルコードです:私はこのような何かを行うことができ、コントローラで

Smarty.class.php 

function not_found() { 
header('HTTP/1.1 404 Not Found'); 

if (!$this->get_template_vars('page_title')) { 
    $this->assign('page_title', 'Page not found'); 
    } 

    $this->display('not-found.tpl'); 
    exit; 
} 

$this->load->model('article_model'); 
$article = $this->article_model->get_latest(); 

if ($article) { 
    $this->smarty->assign('article', $article); 
    $this->smarty->view('article'); 
} else { 
    $this->smarty->assign('title', Article not found'); 
    $this->smarty->not_found(); 
} 

同様に、私は/system/application/error/error_404.phpにコードを変更することができます

$CI =& get_instance(); 
$CI->cismarty->not_found(); 

これはうまく機能し、少量のコードを使用し、欠落しているエンティティの種類ごとに404機能を複製しません。

私は、組み込みのCodeIgniterビューでも同様のことができると思います。重要なことは、あなたがあなたのビューを行う前にヘッダを吐き出すことです。

更新:

Using Smarty with CodeIgniter

:私は、ここで説明したのと同様のカスタムSmartyのラッパーを使用します
関連する問題