Laravel 如何处理 PHP 警告?

Vic*_*eal 3 php ldap exception laravel

我正在尝试使用 Laravel 连接到 LDAP 服务器。重要的是我正在使用 PHP 函数ldap_connect并且ldap_bind不是使用包来处理它。

重点是,当我提供错误的用户名和密码时,该ldap_bind函数会向我们发出 PHP 警告。我对此警告表示同意,并且正如文档中所述,该函数返回false当绑定未发生时

但是,当触发此警告时,Laravel 会引发异常。这不是异常,Laravel 不应该抛出异常,而且我不想将其作为异常处理;我只需要构建一个if条件,将消息返回给用户。

Laravel 是否将所有警告作为异常捕获?

Ris*_*ana 5

这是 Laravel 的预期行为。Laravel 会将任何错误转化为ErrorException实例。这是类bootstrap()内部的方法Illuminate/Foundation/Bootstrap/HandleExceptions.php

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');
    }
}
Run Code Online (Sandbox Code Playgroud)

error_reporting(-1);将设置 PHP 报告所有错误(在此处阅读更多信息)。

而这部分代码:

set_error_handler([$this, 'handleError']);
Run Code Online (Sandbox Code Playgroud)

将设置自定义错误处理程序。如果您检查该handleError()方法,很明显 Laravel 会将任何错误转换为ErrorException实例。

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

在此处阅读有关用户定义的错误处理程序的更多信息。

希望这能澄清事情。:)