2016-11-11 5 views
0

Laravelを使用してLDAPサーバーに接続しようとしています。私がPHP関数ldap_connectldap_bindを使用して、それを処理するのではなく、パッケージを使用していると言うことが重要です。LaravelはどのようにPHPの警告を処理しますか?

私が間違ったユーザーとパスワードを入力すると、ldap_bind関数はPHPの警告を表示します。私はこの警告でOKです。また、ドキュメントにあるように、バインドが発生しない場合、関数はを返します。

しかし、この警告が発生すると、Laravelは例外をスローします。これは例外ではありませんが、Laravelは例外をスローするべきではなく、これを例外として処理したくありません。私はちょうどあなたにメッセージを返すif条件を構築しなければなりません。

Laravelはすべての警告を例外としてキャッチしますか?

+0

特定の例外がスローされた場合、そのハンドラをオーバーライドして、デフォルトとは異なる動作にすることができます。 Laravel Docsの[this](https://laravel.com/docs/5.3/errors#the-exception-handler)を参照してください。例外クラスとは何ですか? –

+0

@IlkerMutluクラスはErrorExceptionです。これは一般的な例外であるため、これも奇妙です。 –

+0

次に、 '' ldap_bind'''呼び出しをtry catchブロックにラップします。 –

答えて

2

ある変数かどうかを確認しようとするよりも作成しますLaravelのために。 LaravelはエラーをErrorExceptionインスタンスに変換します。 Illuminate/Foundation/Bootstrap/HandleExceptions.phpクラスの中にbootstrap()メソッドがあります。

public function bootstrap(Application $app) 
{ 
    $this->app = $app; 

    error_reporting(-1); 

    set_error_handler([$this, 'handleError']); 

    set_exception_handler([$this, 'handleException']); 

    register_shutdown_function([$this, 'handleShutdown']); 

    if (! $app->environment('testing')) { 
     ini_set('display_errors', 'Off'); 
    } 
} 

error_reporting(-1);は、すべてのエラーを(here続きを読む)報告してPHPを設定します。

コードのこの部分中:

set_error_handler([$this, 'handleError']); 

は、カスタムエラーハンドラを設定します。 handleError()メソッドをチェックすると、LaravelがエラーをErrorExceptionインスタンスに変換することは明らかです。

public function handleError($level, $message, $file = '', $line = 0, $context = []) 
{ 
    if (error_reporting() & $level) { 
     throw new ErrorException($message, 0, $level, $file, $line); 
    } 
} 

ユーザー定義エラーハンドラhereについて詳しくは、こちらをご覧ください。

この明確な事柄を期待してください。 :)

0

私はそれを書いていないので、正確にはわかりませんが、この方法で動作させると、ロギングがずっと簡単になると思います。

警告はPHPのエラーログに記録されますが、コンテキストとして追加情報を渡すことはできません。

この警告が例外に変わった場合、例外をロガーに渡すことができます。また、ヒットしたルートやリクエスト変数などの情報をすべて一緒にログに記録できます。また、ログ、デバッグ、情報、通知、警告、エラー、クリティカル、アラート、および緊急事態として指定することにより、問題の重大度を指示し、モノログを通じて、それぞれの問題を適切に処理します。これにより、読み易いログが作成され、コードのデバッグがはるかに容易になります。他の人が指摘しているよう

さらに、それはまた、あなたが私も信じているのtry catchブロックでの作業を行うことができますすっきりとクリーンなコードいくつかは、これは意図した動作が=== false

関連する問題