2016-11-11 94 views
0

我试图使用Laravel连接到LDAP服务器。说我正在使用PHP函数ldap_connectldap_bind而不是使用包来处理它是很重要的。Laravel如何处理PHP警告?

问题是,当我提供错误的用户名和密码时,ldap_bind函数给我们一个PHP警告。对于此警告,我可以,并且如文档中所述,函数返回false未发生绑定时。

但是,当这个警告被触发时,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);将设置PHP报告所有错误(阅读更多here)。

虽然这部分代码:

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的错误日志中,但不可能将其他信息作为上下文一起传递。

如果该警告变成异常,那么您可以将异常传递给记录器以及其他信息,例如命中的路由,请求变量等等,并将所有内容记录在一起。您还可以通过将问题指定为日志,调试,信息,通知,警告,错误,危急,警报和紧急情况,并通过独白来处理问题的严重性,并根据您的需要处理每个问题。这会创建一个更容易阅读的日志,并使您的代码更易于调试。

此外,正如其他人所指出的那样,它也可以让你做你的尝试catch块的工作,我相信也创造整洁和干净的代码不是试图去检查是否存在变量=== false