Ответ 1
Это работает для меня
@if(Session::has('success'))
<div class="alert-box success">
<h2>{{ Session::get('success') }}</h2>
</div>
@endif
Я пытаюсь отобразить мое флеш-сообщение.
Это в моем файле маршрутизации
Route::post('users/groups/save', function(){
return Redirect::to('users/groups')->withInput()->with('success', 'Group Created Successfully.');
});
Это, на мой взгляд,
{{ $success = Session::get('success') }}
@if($success)
<div class="alert-box success">
<h2>{{ $success }}</h2>
</div>
@endif
Но ничего не работает.
Когда я пытаюсь это сделать, я получаю ошибку. Переменная $success - undefined. Но на самом деле это также показывает флеш-сообщение.
{{ Session::get('success') }}
@if($success)
<div class="alert-box success">
<h2>{{ $success }}</h2>
</div>
@endif
Это работает для меня
@if(Session::has('success'))
<div class="alert-box success">
<h2>{{ Session::get('success') }}</h2>
</div>
@endif
если вы используете bootstrap-3, попробуйте script ниже для Alert Style
@if(Session::has('success'))
<div class="alert alert-success">
<h2>{{ Session::get('success') }}</h2>
</div>
@endif
когда вы устанавливаете переменную или сообщение с помощью ->with()
, оно не устанавливает переменную/сообщение во время сеанса, а создает переменную, доступную в вашем представлении, поэтому в вашем случае просто используйте $success
вместо Session::get('success')
И если вы хотите установить сообщение в сеансе flash, используйте этот Session::flash('key', 'value');
, но помните, что с помощью флеш-сессии данные доступны только для следующего запроса.
В противном случае вы можете использовать Session::put('key', 'value');
для хранения в сеансе
для получения дополнительной информации читайте здесь
два метода:
Способ 1 - если вы используете
return Redirect::to('users/groups')->withInput()->with('success', 'Group Created Successfully.');
под вашим контроллером create(), добавьте
$success = Session::get('success');
return View::make('viewfile')->with('success', $success);
затем на странице просмотра
@if (isset($success))
{{$success }}
@endif
Что происходит в методе 1, так это то, что вы создаете переменную $success, которая передается в ваш create(), но у нее нет способа отображения $success. isset всегда будет терпеть неудачу, если вы не установите переменную, чтобы получить сообщение и вернуть его.
Метод 2 - используйте return Redirect withFlashMessage
return Redirect::route('users/groups')->withFlashMessage('Group Created Successfully.');
затем на странице просмотра
@if (Session::has('flash_message'))
{{ Session::get('flash_message') }}
@endif
Метод 2 намного чище и не требует дополнительного кода в create().
{{ Session::get('success') }}
Это просто перехватывает переменную сеанса 'success'. Поэтому, когда вы используете
{{ Session::get('success') }}
@if($success)
<div class="alert-box success">
<h2>{{ $success }}</h2>
</div>
@endif
вы видите его вывод вместе с ошибкой следующего оператора. Поскольку функция() только устанавливает значение в сеансе и не будет задана как переменная. Следовательно, @if($success)
приведет к ошибке переменной undefined.
Как сказал @Andreyco,
@if(Session::has('success'))
<div class="alert-box success">
<h2>{{ Session::get('success') }}</h2>
</div>
@endif
Это должно сработать.
Причина, по которой вы не видите этого, может быть потому, что действие, которое вы выполняете, не является успешным. И это не требует от вас переустановки xampp или изменения php.ini.
Laravel 4.2 Лично я использую
Session::flash('key', 'value');
return Redirect::to('some/url');
то в идентификаторе вида сначала проверьте, есть ли сеанс этого ключа в представлении
@if(Session::has('key'))
{{Session::get('key')}} //this prints out the message or your 'value' in the session::flash method
@endif
он работает для меня большую часть времени, и у меня обычно есть тот шаблон лезвия, встроенный в мой взгляд, так что я могу нажимать сообщения об успешном просмотре из моих кодов.
пожалуйста, обратите внимание, что в документации указано, что "Иногда вы можете захотеть сохранить элементы в сеансе только для следующего запроса. Вы можете сделать это с помощью метода Session:: flash", так что да, он истекает после следующего стр.
надеюсь, что это поможет
i, только что понятый при использовании Redirect:: to(), когда вы используете метод inInput(), привязка функции to() для передачи переменных не будет работать. единственный способ - либо вы разворачиваете свои входы отдельно, используя Input:: flash(), и используйте команду with() для передачи своих переменных или передаете свою переменную через сеанс с использованием Session:: flash ( "ключ", "val" ) и получить в представлении через session:: get ('ключ').
В этой ссылке описано, как это сделать http://vegibit.com/flash-messages-in-laravel/
Просто попробовал с laravel 5 - работает для меня.
это должно работать на localhost и на хосте, и я попробовал его.
<?php $success = Session::get('success'); ?>
@if($success)
<div class="alert-box success">
<h2>{{ $success }}</h2>
</div>
@endif
Внутри файла routes.php попытайтесь создать свои маршруты в
Route::group(['middleware' => ['web']], function () {
//routes here
}
затем используйте
@if(Session::has('success'))
<div class="alert-box success">
<h2>{{ Session::get('success') }}</h2>
</div>
@endif
Я исправил мой, изменив драйвер сеанса в config/session.php из массива в файл!