Обработка флеш-сообщений Laravel 5.1

В Laravel 5.0 и 4. * была эта опция, чтобы проверить, есть ли у Session flash_messages:

контроллер:

public function store(Request $request) {
Session::flash('flash_message', 'Success');
return redirect('somepage');
}

И тогда вы можете назвать это в вашем макете:

@if (Session::has('flash_message'))
<p>{{ Session::get('flash_message') }}</p>
@endif

Это прекрасно работало, однако в Laravel 5.1 все изменилось. Теперь он хранится в переменной запроса. Итак, я изменил его в контроллере:

public function store(Request $request) {
$request->session()->flash('flash_message', 'Success');
return redirect('somepage');
}

И я называю это в макете:

@if($request->session()->has('flash_message'))
<p>{{ $request->session()->get('flash_message') }}</p>
@endif

Я делаю именно то, что указано в документации по Laravel 5.1:

Определение, существует ли элемент в сеансе

Метод has может использоваться для проверки наличия элемента в сеансе.
Этот метод вернет true, если элемент существует:

if ($request->session()->has('users')) { // }

Теперь это прекрасно работает для метода store, потому что я добавил туда только flash_message, но если я хочу получить доступ к другому методу, например index, create, edit и т. Д., Он показывает эту ошибку:

ErrorException

Неопределенная переменная: запрос

Я понимаю, что переменная запроса не объявлена ​​в других методах, и я могу обойти это выражение if, используя isset($request),

Есть ли лучшее решение, чтобы проверить, установлен ли мой flash_message в $request переменная, как в более ранних версиях Laravel?

0

Решение

Похоже, вы используете контроллеры, сгенерированные Laravel.

Если вы посмотрите на определения методов для store а также update вы найдете параметр Request $request, Включая этот Laravel автоматически создает Request экземпляр для вас.

Для доступа к этому другими способами у вас есть три варианта:

Добавьте этот же параметр в любое другое определение метода, и Laravel сгенерирует его для вас таким же образом.

Создайте функцию конструктора и назначьте ей Request экземпляр атрибута.

public function __construct(Request $request)
{
$this->request = $request;
}

декларировать use Session; до определения класса, чтобы сделать Session класс доступен в вашем пространстве имен.

1

Другие решения

Вы все еще можете использовать старый метод :). В последней версии Laravel добавлены новые способы достижения этой цели. Здесь приведен пример кода для отображения сообщений об ошибках, которые передаются в виде флеш-сообщений на страницу просмотра.

Образец кода

@if ($message = Session::get('success'))
<div class="alert alert-success alert-block">
<button type="button" class="close" data-dismiss="alert">&times;</button>
<h4>Success</h4>
@if(is_array($message))
@foreach ($message as $m)
{{ $m }}
@endforeach
@else
{{ $message }}
@endif
</div>
@endif
0

По вопросам рекламы [email protected]