拉拉维尔如何在不在控制器中时返回 JSON?



有没有办法通过使用类似于abort()函数的东西从laravel返回JSON。

从控制器返回JSON很容易,我们只需调用

return response()->json(['message' => 'my mesage'], 200);

但是从其他地方(例如自定义类(要返回 JSON,我必须创建一个返回链到控制器。

有没有办法在不诉诸返回链的情况下返回 json。 就像使用abort()功能一样。 我想使用类似于abort(400, 'my message')的东西,但不是像中止那样返回 html,而是返回 JSON。

或者有没有办法覆盖abort以返回 JSON。

我将不胜感激适用于 laravel 5.3 及更高版本的完整解决方案。

首先,如果你发现自己想知道这些事情,你需要审查你的代码。

控制器应获取控制器负责为其生成相应响应的数据。您不应该将响应委托给几乎所有地方

您还应该避免abort外部控制器,您应该抛出适当的异常。

话虽如此,这里有一个胖丑陋的黑客给你:

创建例外:

class JsonResponse  extends Exception { 
private $data;
public __construct($data, $message = null, $code = 0, $previous = null) {
$this->data = $data;
parent::__construct($message,$code,$previous);
}
}

在您的异常处理程序中:通常AppExceptionsHandler

protected $dontReport = [
// other lines
JsonResponse::class  //
];
public function render($request, Exception $exception) {
if ($exception instanceof JsonResponse) {
return reponse()->json($e->getData());
}
//Other lines
}

然后,每当您需要立即返回 JSON 响应时,只需执行以下操作:

throw new JsonResponse($data);

但是,这显然在尝试捕获块中失败。

最新更新