在404页中显示异常错误消息


Displaying exception error message in 404 pages

我有一个控制器,我可以在其中执行类似的操作

return abort('401', 'User cannot be found');

如何访问视图中的消息(errors/401.blade.php)。

/************* 401.blade.php ***********/
{{ dd($exception) }}

如果我死了转储$exception在我看来,我会得到这个

HttpException {#203 ▼
  -statusCode: "401"
  -headers: []
  #message: "User cannot be found"
  #code: 0
  #file: "C:'laravel'framework'src'Illuminate'Foundation'Application.php"
  #line: 882
  -trace: array:54 [▶]
}

如何访问消息变量?

好吧,在Laravel文档中这样说:

自定义HTTP错误页面

Laravel使返回各种HTTP的自定义错误页面变得容易状态代码。例如,如果您希望自定义404 HTTP状态代码,创建resources/views/errors/404.blade.php。此文件将在您的应用

应命名此目录中的视图以匹配HTTP它们对应的状态代码。

我认为您必须创建一个401.blade.php视图,然后您的代码才能工作。

如图所示:https://stackoverflow.com/a/29633624/4425719

扩展Laravel的异常处理程序,Illuminate'Foundation'Exceptions'Handler和覆盖renderHttpException(Symfony'Component'HttpKernel'Exception'HttpException $e)方法。

如果你还没有运行php artisan fresh,这对你来说会很容易。只是编辑app/Exceptions/Handler.php或创建新文件。

Handler.php

<?php namespace App'Exceptions;
use Exception;
use Illuminate'Foundation'Exceptions'Handler as ExceptionHandler;
use Symfony'Component'HttpKernel'Exception'HttpException;
class Handler extends ExceptionHandler {
  // ...
  protected function renderHttpException(HttpException $e) {
    $status = $e->getStatusCode();
    if (view()->exists("errors.{$status}")) {
      return response()->view("errors.{$status}", compact('e'), $status);
    }
    else {
      return (new SymfonyDisplayer(config('app.debug')))->createResponse($e);
    }
  }
}

然后,在404.blade.php中使用$e变量。

abort(404, 'Something not found');

以及在您的404.blade.php

{{ $e->getMessage() }}

有关getStatusCode()等其他有用方法,请参阅Symfony'Component'HttpKernel'Exception