我正在使用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
目录中的每个响应代码提供Blade视图。例如,404错误将使用/resources/views/errors/404.blade.php
。
手册中没有提到的是,在视图中您可以访问$exception
对象。因此,您可以使用{{ $exception->getMessage() }}
来获取传递到abort()
中的消息。
扩展Laravel的异常处理程序IlluminateFoundationExceptionsHandler
,并用自己的方法覆盖renderHttpException(SymfonyComponentHttpKernelExceptionHttpException $e)
方法。
如果你还没有运行php artisan fresh
,这对你来说会很容易。只需编辑app/Exceptions/Handler.php
,或创建一个新文件。
Handler.php
<?php namespace AppExceptions;
use Exception;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use SymfonyComponentHttpKernelExceptionHttpException;
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()
,请参阅SymfonyComponentHttpKernelException
全局共享一个变量怎么样?
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