7

我有一种方法可以检查用户是否具有有效的会话信息。这应该引发异常,Guzzle\Http\Exception\BadResponseException但是当我尝试捕获它时:

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

Laravel 没有处理这段代码并立即开始它自己的错误处理。以及如何绕过 Laravel 自己的实现并使用我自己的 Catch 的想法。

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

编辑2:

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

4

3 回答 3

9

实际上这个异常可以在 Laravel 中被捕获,你只需要尊重(并理解)命名空间:

如果你有

namespace App;

你也是

catch (Guzzle\Http\Exception\BadResponseException $e) 

PHP 了解您正在尝试

catch (\App\Guzzle\Http\Exception\BadResponseException $e) 

因此,要使其正常工作,您只需要一个根斜杠:

catch (\Guzzle\Http\Exception\BadResponseException $e) 

它会起作用。

于 2014-02-17T13:06:58.297 回答
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 文档的更多信息。

于 2013-10-15T02:50:57.953 回答
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
于 2016-02-26T11:01:43.683 回答