2016-11-11 1 views
0

Ich versuche, mit Laravel eine Verbindung zu einem LDAP-Server herzustellen. Es ist wichtig zu sagen, dass ich die PHP-Funktionen ldap_connect und ldap_bind verwende, anstatt ein Paket zu verwenden, um damit umzugehen.Wie behandelt Laravel PHP-Warnungen?

Der Punkt ist, dass, wenn ich falsche Benutzer und Passwort, die ldap_bind Funktion gibt uns eine PHP-Warnung. Ich bin OK mit dieser Warnung und, wie in der Dokumentation, gibt die Funktion false zurück, wenn die Bindung nicht auftritt.

Aber Laravel wirft eine Ausnahme, wenn diese Warnung ausgelöst wird. Dies ist keine Ausnahme, Laravel sollte keine Ausnahme auslösen und ich möchte das nicht als Ausnahme behandeln; Ich muss nur eine if Bedingung erstellen, die eine Nachricht an den Benutzer zurückgibt.

Verfolgt Laravel alle Warnungen als Ausnahme?

+0

Wenn eine bestimmte Ausnahme ausgelöst wird, können Sie ihren Handler überschreiben, um sich anders als der Standard zu verhalten. Siehe [this] (https://laravel.com/docs/5.3/errors#the-exception-handler) aus den Laravel-Dokumenten. Was ist die Ausnahmeklasse? –

+0

@IlkerMutlu Die Klasse ist ErrorException. Das ist auch seltsam, weil es eine generische Ausnahme ist. –

+0

Dann kannst du den '' 'ldap_bind''' Aufruf in einen try catch Block schreiben. –

Antwort

2

Variable zu überprüfen Dies ist das gewünschte Verhalten ist für Laravel. Laravel wird jeden Fehler in eine ErrorException Instanz verwandeln. Hier ist die bootstrap() Methode innerhalb der Illuminate/Foundation/Bootstrap/HandleExceptions.php Klasse.

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'); 
    } 
} 

Die error_reporting(-1); wird PHP gesetzt, alle Fehler melden (lesen Sie mehr here).

Während dieser Teil des Codes:

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

eine benutzerdefinierte Fehlerhandler gesetzt wird. Wenn Sie die Methode handleError() überprüfen, ist es ziemlich klar, dass Laravel jeden Fehler in eine ErrorException-Instanz verwandelt.

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

Lesen Sie mehr über benutzerdefinierte Fehlerhandler here.

Hoffe, diese klaren Dinge auf. :)

0

Nicht sicher, genau der Grund, weil ich es nicht geschrieben habe, aber ich nehme an, es auf diese Weise funktioniert macht die Protokollierung viel einfacher.

Warnungen werden im Fehlerprotokoll von PHP eingeloggt, aber es ist nicht möglich, zusätzliche Informationen als Kontext zu übergeben.

Wenn diese Warnung jedoch in eine Ausnahme umgewandelt wird, dann können Sie die Ausnahme an den Logger übergeben sowie andere Informationen wie die Route, die getroffen wurde, die Anforderungsvariablen usw. ... und alles zusammen protokollieren. Sie können auch den Schweregrad des Problems diktieren, indem Sie ihn als Protokoll, Debug, Info, Benachrichtigung, Warnung, Fehler, Kritisch, Warnung und Notfall festlegen. Behandeln Sie jeden Fehler nach eigenem Ermessen. Dies erstellt ein Protokoll, das viel einfacher zu lesen ist und Ihren Code viel einfacher zu debuggen macht.

Zusätzlich ist, wie andere haben darauf hingewiesen, sondern ermöglicht auch Sie Ihre Arbeit in Try-Catch-Blöcke zu tun, was ich auch glaube, schafft sauberere und sauberer Code als zu versuchen, wenn einige === false

Verwandte Themen