Передайте пользовательское сообщение (или любые другие данные) в Laravel 404.blade.php
Я использую 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 для каждого кода ответа в каталоге /resources/views/errors
. Например, ошибка 404 будет использовать /resources/views/errors/404.blade.php
.
Что не упоминается в руководстве, так это то, что внутри представления у вас есть доступ к объекту $exception
. Поэтому вы можете использовать {{ $exception->getMessage() }}
для получения сообщения, которое вы передали в abort()
.
Ответ 2
Разверните обработчик исключений 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
Ответ 3
Как обмениваться переменной глобально?
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