2011-10-04 15 views
5

私はCodeIgniterのテンプレートライブラリhttp://williamsconcepts.com/ci/codeigniter/libraries/template/reference.htmlを使用していますが、カスタムエラーページも実装したいと思います。私はデフォルトルータを拡張するMY_Routerを含む1つの方法を見つけました:http://maestric.com/doc/php/codeigniter_404しかしそれは404エラーだけを扱います。私はすべてのエラーがデータベースのエラーなど簡単なユーザーフレンドリーなページを表示するようにしたい、私はそれがコントローラを経由して、私はテンプレートライブラリを使用することができますし、部分的に私も自分自身を送信する電子メール機能を実装することができます発生したエラーに関する情報。CodeIgniterのテンプレートを使用したカスタムエラーページ

上記のMY_Routerメソッドの機能をerror_dbのような他のエラーに対して拡張することについて尋ねられましたが、著者から回答が得られなかったので、私はここでどのようにこれを行うのか分かりませんか?上記の方法またはそれを達成する他の簡単な方法。私は初心者ですので、CodeIgniterの基本的な機能に関する知識はあまりないと思います.-

+0

時計を作成します/アプリあなたはそれを使用して – user973254

+2

を扱うことができ、CIコアクラス(正確にはCI_Exceptionsを拡張する必要があります)を拡張することができます[ここで説明したように]テンプレートデータベースエラー、404、phpエラーと一般的なエラーがあります。 (http://codeigniter.com/user_guide/general/core_classes.html) – user973254

+0

エラーファイルについては知っていますが、テンプレートライブラリを使用して他のサイトと同じように見えるようにする方法はわかりません。これを達成するためにCIコアクラスをどのように拡張すればよいですか?例を挙げて答えを提供してください... – Anders

答えて

1

私はこのようにしています: 私自身のエラーページを作成します。エラー、私は404ページを実際に読み込みます。

だから私のデフォルトコントローラが私のsite.phpは次のようになり、site.phpであると言う:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Site extends CI_Controller { 

    public function index() 
    { 
     $this->load->view('welcome_message'); 
    } 

    public function view($page = "home" , $function = "index") 
    { 
     do_something(); 
     if($status == "404") 
     { 
      $function = "404"; 
     } 
     $this->load->view('templates/header', $data); 
     $this->load->view($page.'/'.$function, $data);  
     $this->load->view('templates/footer', $data); 
    } 




} 

/* End of file welcome.php */ 
/* Location: ./application/controllers/welcome.php */ 

エラーが発生するたびにだから私は家/ 404.phpを提供しています。つまり、私はCodeIgniterがshow_404();を呼び出さないようにします。したがって、404ページは他のページのように見えます。

P.S.私はCodeIgniterのウェブサイトで素敵なチュートリアルに従ったと仮定します。

+5

これはどのようにしてもHTTP 200コードを送信します。それは単に404を持っているという錯覚を与えます。 – Jeremy

2

私はExceptionsクラスの拡張を作成しました。 この拡張では、$this->Exceptions->show_error();メソッドを置き換えました。魔法使いは、show_error()のCI関数で使用されています。

私がshow_error('User is not logged in', 401);に電話すると、このカスタムメソッドはerror_ $status_codeファイルを最初に探しています。上記の例の場合、error_401.phpファイルが検索されます。

このファイルが存在しない場合は、デフォルトの$this->Exceptions->show_error();のようにerror_general.phpファイルをロードするだけです。

あなたの場合、以下のコードを使用して、ライブラリ、コントローラなどでエラーを発生させることができます。

<?php 
 

 
if(!(isset($UserIsLoggedin))){ 
 
    $this->load->view('template/header'); 
 
    show_error('User is not logged in', 401); 
 
    $this->load->view('template/footer'); 
 
} 
 

 
?>

あなたerror_401.phpファイルは以下のようになります。

<div id="container"> 
 
\t <h1><?php echo 'This is an 401 error'; ?></h1> 
 
\t <?php echo $message; ?> 
 
</div>

/application/core/MY_Exceptions.php:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
 

 
class MY_Exceptions extends CI_Exceptions 
 
{ 
 
\t 
 
\t function show_error($heading, $message, $template = 'error_general', $status_code = 500) 
 
\t { \t \t 
 
\t \t if((!isset($template)) || ($template == 'error_general')){ 
 
\t \t \t if(file_exists(APPPATH.'errors/error_'.$status_code.'.php')) { 
 
\t \t \t \t $template = 'error_'.$status_code; 
 
\t \t \t } 
 
\t \t }  \t 
 
\t \t 
 
\t \t if (!isset($status_code)) $status_code = 500; 
 
\t \t 
 
\t \t set_status_header($status_code); 
 

 
\t \t $message = '<p>'.implode('</p><p>', (! is_array($message)) ? array($message) : $message).'</p>'; 
 

 
\t \t if (ob_get_level() > $this->ob_level + 1) 
 
\t \t { 
 
\t \t \t ob_end_flush(); 
 
\t \t } 
 
\t \t ob_start(); \t \t 
 
\t \t \t \t 
 
\t \t include(APPPATH.'errors/'.$template.'.php'); 
 
\t \t $buffer = ob_get_contents(); 
 
\t \t ob_end_clean(); 
 
\t \t return $buffer; 
 
\t } 
 
\t 
 
} 
 

 
?>

1

カスタムエラーページを作成する最も簡単な方法は、(他のほとんどのエラーのために)/application/views/errors/html/error_*.phpなど(データベースエラーのため)(404エラー用)error_404.phperror_db.phperror_general.phpでファイルを編集することです。

これらのページは、applicationディレクトリ内にあるため、必要に応じて自由にカスタマイズできます。

通常のビューテンプレートは、次のようなものに見える場合:

<?php $this->load->view('includes/header'); ?> 
... 
... 
<?php $this->load->view('includes/footer'); ?> 

をあなたはそうのようなあなたの/application/views/errors/html/error_*.phpファイルでこれを適応させることができます。私たちは、もはやビューを使用している

<?php 
    $page_title = $heading; 
    include VIEWPATH.'includes'.DIRECTORY_SEPARATOR.'header.php'; 
?> 
<div class="well"> 
    <h1><?php echo $heading; ?></h1> 
    <?php echo $message; ?> 
</div> 
<?php include VIEWPATH.'includes'.DIRECTORY_SEPARATOR.'footer.php'; ?> 

お知らせが、代わりにheader & footerのビューファイルを含めてください。

注意すべきもう一つのこと:

headerビューでは、私は$data['page_title']が含ま$dataオブジェクトを渡しています。エラーページはビューを使用しないので、ビューに通常渡す変数を追加する必要があります。したがって、$page_titleの存在があります。ここ

0
config/routes.php 

編集

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

タイプは、例えば、エラーのためにあなたのコントローラ

は `あなたに機能インデックス負荷あなたビュー

関連する問題