Vic*_*eal 3 php ldap exception laravel
我正在尝试使用 Laravel 连接到 LDAP 服务器。重要的是我正在使用 PHP 函数ldap_connect并且ldap_bind不是使用包来处理它。
重点是,当我提供错误的用户名和密码时,该ldap_bind函数会向我们发出 PHP 警告。我对此警告表示同意,并且正如文档中所述,该函数返回false当绑定未发生时
但是,当触发此警告时,Laravel 会引发异常。这不是异常,Laravel 不应该抛出异常,而且我不想将其作为异常处理;我只需要构建一个if条件,将消息返回给用户。
Laravel 是否将所有警告作为异常捕获?
这是 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)
在此处阅读有关用户定义的错误处理程序的更多信息。
希望这能澄清事情。:)