В 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?
Похоже, вы используете контроллеры, сгенерированные Laravel.
Если вы посмотрите на определения методов для store
а также update
вы найдете параметр Request $request
, Включая этот Laravel автоматически создает Request
экземпляр для вас.
Для доступа к этому другими способами у вас есть три варианта:
Добавьте этот же параметр в любое другое определение метода, и Laravel сгенерирует его для вас таким же образом.
Создайте функцию конструктора и назначьте ей Request
экземпляр атрибута.
public function __construct(Request $request)
{
$this->request = $request;
}
декларировать use Session;
до определения класса, чтобы сделать Session
класс доступен в вашем пространстве имен.
Вы все еще можете использовать старый метод :). В последней версии Laravel добавлены новые способы достижения этой цели. Здесь приведен пример кода для отображения сообщений об ошибках, которые передаются в виде флеш-сообщений на страницу просмотра.
@if ($message = Session::get('success'))
<div class="alert alert-success alert-block">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Success</h4>
@if(is_array($message))
@foreach ($message as $m)
{{ $m }}
@endforeach
@else
{{ $message }}
@endif
</div>
@endif