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

时间:2015-03-20 09:45:13

标签: php laravel laravel-5

我使用的是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);
});

3 个答案:

答案 0 :(得分:36)

(注意:从my answer here复制。)

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

手册中未提及的是,您可以在视图中访问/resources/views/errors/404.blade.php对象。因此,您可以使用$exception将您传递的信息传递到{{ $exception->getMessage() }}

答案 1 :(得分:7)

使用您自己的方法扩展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);
    }
  }

}

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

abort(404, 'Something not found');

并在404.blade.php

{{ $e->getMessage() }}

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

答案 2 :(得分:0)

如何全局共享变量?

 view()->share('message', 'llnk has gone away');
 // or using the facade
 View::share('message', 'llnk has gone away badly');

只需确保在模板中回退到默认值,以防您忘记设置它。

请参阅与视图共享数据:http://laravel.com/docs/5.0/views