如何将自定义消息(或任何其他数据)传递给Laravel404.blde.php?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我使用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);
});
提问于
用户回答回答于

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

手册中没有提到的是,在视图内可以访问该$exception对象。所以你可以用它{{ $exception->getMessage() }}来获取你传递给你的消息abort()

用户回答回答于

扩展Laravel的Exception Handler,Illuminate\Foundation\Exceptions\HandlerrenderHttpException(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);
    }
  }

}

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

abort(404, 'Something not found');

和你的 404.blade.php

{{ $e->getMessage() }}

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

扫码关注云+社区