如何从 laravel5 中的中间件抛出禁止的异常?
Posted
技术标签:
【中文标题】如何从 laravel5 中的中间件抛出禁止的异常?【英文标题】:How throw forbidden exception from middleware in laravel5? 【发布时间】:2015-05-02 13:29:36 【问题描述】:我正在 laravel 5 中编写一个中间件。我想从中间件中抛出一个带有代码 403 的禁止异常。我的中间件功能如下:
use Exception;
public function handle($request, Closure $next)
if (!Auth::check())
throw new Exception("Access denied", 403);
return $next($request);
我正在从控制器调用我的中间件,我收到代码 500 但不是 403 的错误消息。我该如何解决这个问题?
【问题讨论】:
【参考方案1】:您可以简单地使用abort()
助手。 (或App::abort()
)
public function handle($request, Closure $next)
if (!Auth::check())
abort(403, 'Access denied');
return $next($request);
您可以通过覆盖render()
来处理App\Exceptions\Handler
内部的这些异常,例如:
public function render($request, Exception $e)
if($e instanceof HttpException && $e->getStatusCode() == 403)
return new JsonResponse($e->getMessage(), 403);
return parent::render($request, $e);
【讨论】:
谢谢.. 我正在开发 REST API,所以我想生成 json 响应。这怎么可能? 我想从异常处理程序中捕获所有这些,就像if ($e instanceof ModelNotFoundException || $e instanceof NotFoundHttpException || $e instanceof MethodNotAllowedHttpException) return new JsonResponse($error_response, 404);
它不起作用,但我已经编写了一些我自己的异常类,现在我正在使用相同的类。
你是use
Symfony\Component\HttpKernel\Exception\HttpException
吗?因为这就是 abort()
抛出的。以上是关于如何从 laravel5 中的中间件抛出禁止的异常?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5刀片在出现错误而不是抛出异常时显示空白页面