将自定义消息(或任何其他数据)传递到 Laravel 404.blade.php

2022-08-30 20:46:17

我正在使用Laravel 5,并且我已经在404.blade.php

views/errors/404.blade.php

每次我调用时都会呈现此文件:

abort(404); // alias of App::abort(404);

如何传递自定义消息?像这样的东西404.blade.php

Sorry, {{ $message }}

填充者(示例):

abort(404, 'My custom message'); 

abort(404, array(
    'message' => 'My custom message'
));

在Laravel 4中,可以使用:App::missing

App::missing(function($exception)
{
    $message = $exception->getMessage();
    $data = array('message', $message);
    return Response::view('errors.404', $data, 404);
});

答案 1

(注意:从我的答案复制在这里

在 Laravel 5 中,可以为目录中的每个响应代码提供 Blade 视图。例如,404 错误将使用 ./resources/views/errors/resources/views/errors/404.blade.php

手册中没有提到的是,在视图内部,您可以访问对象。因此,您可以使用 来获取传入的消息。$exception{{ $exception->getMessage() }}abort()


答案 2

扩展 Laravel 的异常处理程序,并使用自己的方法重写方法。Illuminate\Foundation\Exceptions\HandlerrenderHttpException(Symfony\Component\HttpKernel\Exception\HttpException $e)

如果您还没有运行,那对您来说将很容易。只需编辑 ,或创建一个新文件。php artisan freshapp/Exceptions/Handler.php

处理程序.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);
    }
  }

}

然后,在 .$e404.blade.php

abort(404, 'Something not found');

并在您的404.blade.php

{{ $e->getMessage() }}

有关其他有用的方法,如 ,请参阅getStatusCode()Symfony\Component\HttpKernel\Exception


推荐