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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29163564/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 11:10:37  来源:igfitidea点击:

Pass a custom message (or any other data) to Laravel 404.blade.php

phplaravellaravel-5

提问by giò

I am using Laravel 5, and I have created a file 404.blade.phpin

我使用Laravel 5,我创建了一个文件404.blade.php

views/errors/404.blade.php

This file gets rendered each time I call:

每次调用时都会渲染此文件:

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

How can I pass a custom message? Something like this in 404.blade.php

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

Sorry, {{ $message }}

Filled by (example):

填写人(示例):

abort(404, 'My custom message'); 

or

或者

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

In Laravel 4 one could use App::missing:

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

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

回答by DisgruntledGoat

(Note: copied from my answer here.)

(注意:从我的回答复制过来。)

In Laravel 5, you can provide Blade views for each response code in the /resources/views/errorsdirectory. For example a 404 error will use /resources/views/errors/404.blade.php.

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

What's not mentioned in the manual is that inside the view you have access to the $exceptionobject. So you can use {{ $exception->getMessage() }}to get the message you passed into abort().

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

回答by Harsh Vakharia

Extend Laravel's Exception Handler, Illuminate\Foundation\Exceptions\Handler, and override renderHttpException(Symfony\Component\HttpKernel\Exception\HttpException $e)method with your own.

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

If you haven't run php artisan fresh, it will be easy for you. Just edit app/Exceptions/Handler.php, or create a new file.

如果你还没有跑过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);
    }
  }

}

And then, use $evariable in your 404.blade.php.

然后,$e在您的404.blade.php.

i.e.

IE

abort(404, 'Something not found');

and in your 404.blade.php

并且在你的 404.blade.php

{{ $e->getMessage() }}

For other useful methods like getStatusCode(), refer Symfony\Component\HttpKernel\Exception

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

回答by Luceos

How about sharing a variable globally?

全局共享一个变量怎么样?

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

Just make sure in the template to fallback to a default in case you forget to set it.

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

See sharing data with views: http://laravel.com/docs/5.0/views

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