如何绕过Laravel Exception处理

时间:2013-10-14 12:24:54

标签: php exception symfony laravel guzzle

我有一个检查用户是否有有效会话信息的方法。这应该抛出异常,Guzzle\Http\Exception\BadResponseException但是当我试图抓住它时:

catch (Guzzle\Http\Exception\BadResponseException $e) 
{
    return false;
} 
return true

Laravel无法使用此代码并立即启动它自己的错误处理。关于如何绕过Laravels自己的实现并使用我自己的Catch的想法。

编辑:我刚发现Laravel使用与Symfony相同的异常处理程序,所以我还添加了Symfony2标记。

编辑2:

我通过禁用Guzzle异常并手动检查返回标头来修复此问题。这是一个捷径,但在这种情况下,它完成了这项工作。感谢您的回复!

3 个答案:

答案 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