Подтвердить что ты не робот

Передайте пользовательское сообщение (или любые другие данные) в 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);
});
4b9b3361

Ответ 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