5

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

私の考えは、次の2つのいずれかを実行できるということです。

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

必要な結果を達成するための最良の方法は何ですか?注意すべき落とし穴はありますか?

4

1 に答える 1

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ビューでも同様のことができると思います。重要なことは、ビューを実行する前にヘッダーを吐き出すことです。

更新:ここで説明するものと同様のカスタムSmartyラッパーを使用します。

SmartyをCodeIgniterで使用する

于 2009-05-12T13:30:13.427 に答える