2012-01-05 13 views
0

私はCodeigniterを利用しています。PHPとCodeigniterでのエラー処理。どうやってするの?再帰的コードの回避

私はさまざまな機能を開発しており、意図したとおりに使用すると完全に機能します。

このようなスクリプトの1つであるwhoisスクリプトは、ドメイン名の所有者をチェックします。 しかし、ユーザーが無効なドメイン名を入力すると、そこにはあらゆる種類のエラーが投げかけられています。

たとえば、ユーザーがstack.-comを入力した場合、これはもちろん有効なドメインではありません。したがって、クエリを実行するヘルパーを呼び出すと、結果は返されず、さまざまなエラーが返されます。また、空の配列をユーザーに表示しようとするとエラーが発生します。

私の質問はエラーに関するものです。

私はpreg_matchを使用してドメインが有効かどうかを調べることができました。そうでなければ、私はユーザに出力しようとするエラー変数を設定します。

私のコントローラがエラーページまたは結果ページを表示するかどうかを決定するif elseステートメントに達する前に、プログラムはクエリを実行しており、エラーのないデータを取得するメソッドにアクセスすると、結果ビューに渡します。

I.Eエラーがありますが、無効なアイテムが他のスクリプトに渡されているため、他にも多くのエラーが表示されています。

CodeigniterとMVCの設定では、同じことを何度も繰り返し実行する例外を使わずに、エラーをキャッチしてユーザーに表示する最良の方法は何ですか?

おかげIDEA WITH

EDIT

try 
{ 
$this->load->model('whois'); 
$this->whois->process('domain.-com'); 
} 
catch 
{ 
$this->load->view('errors',$errordata); 
$this->load->view('footer'); 
die; 
} 

$this->load->view('normal_content'); 
$this->load->view('footer'); 

これはCodeIgniterので例外を使用するための推奨設定ですか?私のモデルの中では、問題がある場合、関数は例外をスローします。 catchステートメントはそれらを表示し、死ぬので、コンテンツを表示しません..それは右のように見えません..?

+3

通常は、コントローラにユーザー入力の健全性をチェックする(それがするpreg_matchを(使用してチェックすることができ、フォーマットについてだけの問題である場合))、またはあなたのことを確認してくださいどちらかモデルには十分なエラー処理があり、違法な処理を要求されたときに例外がスローされます。 –

+2

なぜ例外を使いたくないのですか? http://stackoverflow.com/questions/6217786/codeigniter-and-throwing-exceptions –

+0

上記を編集してみてください。まだ少し混乱しています。 Thx –

答えて

1

は、ここで私は通常これを処理する方法です:

  1. ポストバック同じルートにフォーム
  2. エラーがある場合は
  3. 、すべてが合格した場合、エラー状態
  4. で、もう一度フォームを表示、次のステップ/成功状態にNOWリダイレクト

サンプルコード:

<?php 
... 

public function form() 
{ 
    if (strtoupper($this->input->server('REQUEST_METHOD')) == 'POST') 
    { 
     try { 
      // handle all your validation here 
      redirect('success_route'); 
      exit; 
     } 
     catch (Exception $e) 
     { 
      // this could get a little fancier, but a simple solution is to pass the exception 
      // directly to the view. you could also load the `errors` view here, but return the 
      // content to a variable and pass to your full view 
      $this->load->vars('exception', $e); 
     } 
    } 

    $this->load->view('normal_content'); 
    $this->load->view('footer'); 
} 

... 
+0

CodeIgniterには、キャッチされていない例外を 'エラー'コントローラにルーティングする手段はありますか? –

+0

デフォルトではありません。 CI_Controllerを拡張するか、例外ハンドラを登録する必要があります。難しいのは、最初のコントローラーが例外を投げた場合、コントローラーを追加できないということです。かなり多くはそこから死ぬかリダイレクトする必要があります... – landons

+0

ああ。それは素晴らしい機能だろうね。 –

0

あなたは次のようにする必要があります。

1)データベース。PHP:$ db ['default'] ['db_debug'] = FALSE;あなたのモーダルファイル内

2)

try { 
    $query_str = "SELECT * FROM `pro_property` WHERE username = '".$username."'"; 
    $result = $this->db->query($query_str); 

    if (!$result) 
    { 
     throw new Exception('error in query'); 
     return false; 
    }   

    return $result; 

} catch (Exception $e) { 
    print_r($e); 
} 
関連する問題