gpt4 book ai didi

laravel - Laravel 4 中的异常处理 - 理解流程的问题

转载 作者:行者123 更新时间:2023-12-02 22:01:59 24 4
gpt4 key购买 nike

我无法理解 Laravel 如何处理异常。我在 global.php 中注册了异常处理程序,如下所示:

use MyNamespace\Custom\Exceptions\NotAllowedException; 
App::error(function(NotAllowedException $exception, $code)
{
die("MyNamespace\Custom\Exceptions\NotAllowedException catched");
});

App::error(function(\Exception $exception)
{
echo "general exception thrown<br/>";

});

在 Controller 操作中,我现在抛出 NotAllowedException。然而奇怪的是,第一个 Exception 被捕获,然后是 NotFoundException 。

输出为:

general exception thrown 
MyNamespace\Custom\Exceptions\NotAllowedException catched

我认为异常处理程序会堆栈,因此只处理 NotAllowedException。但我错了。我是否误解了 Laravel 中错误处理的概念,或者这是意外的行为?

另一件事:我无法将 http 响应 header 设置为 401。SO 上还有其他关于此问题的线程,但到目前为止还没有解决方案。如果有人知道这件事,我将不胜感激。

感谢您的时间和每一个回复!干杯

最佳答案

异常处理可以看作是一个反向瀑布。首先检查定义的最后一个处理程序。举个例子:

// Custom Exception
class CustomException extends Exception {}

// Error handler in global.php
App::error(function(Exception $exception, $code)
{
echo 'Debug: Exception<br/>';
});

App::error(function(CustomException $exception, $code)
{
echo 'Debug: CustomException<br/>';
});

// Exception in routes.php (or any other place)
throw new CustomException();

两种类型都与 Exception 类型匹配,因此输出:调试:自定义异常调试:异常

但是,如果您从处理程序中返回某些内容,则只会触发第一个匹配的处理程序。要返回带有 HTTP 401 响应代码的 JSON 响应,请执行以下操作:

App::error(function(Exception $exception, $code)
{
return Response::json(array(
'error' => 'Something went wrong (Exception)'
), 500);
});

App::error(function(NotAllowedException $exception, $code)
{
return Response::json(array(
'error' => 'Something went wrong (NotAllowedException)'
), 401);
});

因此,一般来说,您需要首先定义异常处理程序。

关于laravel - Laravel 4 中的异常处理 - 理解流程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com