我有一个检查用户是否有有效会话信息的方法。这应该抛出异常,Guzzle\Http\Exception\BadResponseException
但是当我试图抓住它时:
catch (Guzzle\Http\Exception\BadResponseException $e)
{
return false;
}
return true
Laravel无法使用此代码并立即启动它自己的错误处理。关于如何绕过Laravels自己的实现并使用我自己的Catch的想法。
编辑:我刚发现Laravel使用与Symfony相同的异常处理程序,所以我还添加了Symfony2标记。编辑2:
我通过禁用Guzzle异常并手动检查返回标头来修复此问题。这是一个捷径,但在这种情况下,它完成了这项工作。感谢您的回复!
答案 0 :(得分:9)
实际上这个异常可以在Laravel中捕获,你只需要尊重(并理解)命名空间:
如果你有
namespace App;
你做了
catch (Guzzle\Http\Exception\BadResponseException $e)
PHP了解您正在尝试
catch (\App\Guzzle\Http\Exception\BadResponseException $e)
所以,为了它的工作,你只需要一个根斜杠:
catch (\Guzzle\Http\Exception\BadResponseException $e)
它会起作用。
答案 1 :(得分:2)
默认情况下,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 Documentation。
答案 2 :(得分:2)
而不是你的代码
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