我有一个检查用户是否具有有效会话信息的方法。这应该抛出一个异常,Guzzle'Http'Exception'BadResponseException
但是当我尝试捕获它时:
catch (Guzzle'Http'Exception'BadResponseException $e)
{
return false;
}
return true
Laravel没有到达此代码,并立即开始自己的错误处理。以及关于如何绕过 Laravels自己的实现并使用我自己的 Catch 的想法。
编辑:我刚刚发现Laravel使用与Symfony相同的异常处理程序,所以我还添加了Symfony2标签。
编辑2:
我通过禁用 Guzzle 异常并手动检查返回标头来解决此问题。这有点捷径,但在这种情况下,它可以完成工作。感谢您的回复!
实际上这个异常可以在 Laravel 中捕获,你只需要尊重(并理解)命名空间:
如果你有
namespace App;
而你做到了
catch (Guzzle'Http'Exception'BadResponseException $e)
PHP 明白你正在尝试
catch ('App'Guzzle'Http'Exception'BadResponseException $e)
因此,要使其正常工作,您只需要一个根斜杠:
catch ('Guzzle'Http'Exception'BadResponseException $e)
它会起作用。
默认情况下,app/start/global.php
文件包含所有异常的错误处理程序。但是,如果需要,您可以指定更多处理程序。处理程序根据它们处理的异常type-hint
进行调用。例如,您可以创建一个仅处理BadResponseException
实例的处理程序,例如
App::error(function(Guzzle'Http'Exception'BadResponseException $exception)
{
// Handle the exception...
return Response::make('Error! ' . $exception->getCode());
});
另外,请确保您有一个定义良好的(BadResponseException
)类。 阅读更多关于Laravel文档的信息。
而不是你的代码
catch (Guzzle'Http'Exception'BadResponseException $e)
{
return false;
}
return true
使用此解决方案
catch ('Exception $e)
{
return false;
}
return true
以捕获 Guzzle 抛出的所有可能的异常。
如果您明确想要捕获 BadResponseException,您还可以在异常的类命名空间前面加上"''"。
catch ('Guzzle'Http'Exception'BadResponseException $e)
{
return false;
}
return true