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

Laravel 4 как отображать флэш-сообщение?

Я пытаюсь отобразить мое флеш-сообщение.

Это в моем файле маршрутизации

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
4b9b3361

Ответ 1

Это работает для меня

@if(Session::has('success'))
    <div class="alert-box success">
        <h2>{{ Session::get('success') }}</h2>
    </div>
@endif

Ответ 2

если вы используете bootstrap-3, попробуйте script ниже для Alert Style

    @if(Session::has('success'))
        <div class="alert alert-success">
            <h2>{{ Session::get('success') }}</h2>
        </div>
    @endif

Ответ 3

когда вы устанавливаете переменную или сообщение с помощью ->with(), оно не устанавливает переменную/сообщение во время сеанса, а создает переменную, доступную в вашем представлении, поэтому в вашем случае просто используйте $success вместо Session::get('success')

И если вы хотите установить сообщение в сеансе flash, используйте этот Session::flash('key', 'value');, но помните, что с помощью флеш-сессии данные доступны только для следующего запроса.

В противном случае вы можете использовать Session::put('key', 'value'); для хранения в сеансе

для получения дополнительной информации читайте здесь

Ответ 4

два метода:

Способ 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().

Ответ 5

{{ 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.

Ответ 6

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", так что да, он истекает после следующего стр.

надеюсь, что это поможет

Ответ 7

i, только что понятый при использовании Redirect:: to(), когда вы используете метод inInput(), привязка функции to() для передачи переменных не будет работать. единственный способ - либо вы разворачиваете свои входы отдельно, используя Input:: flash(), и используйте команду with() для передачи своих переменных или передаете свою переменную через сеанс с использованием Session:: flash ( "ключ", "val" ) и получить в представлении через session:: get ('ключ').

Ответ 9

это должно работать на localhost и на хосте, и я попробовал его.

<?php $success = Session::get('success'); ?>
@if($success)
    <div class="alert-box success">
        <h2>{{ $success }}</h2>
    </div>
@endif

Ответ 10

Внутри файла 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

Ответ 11

Я исправил мой, изменив драйвер сеанса в config/session.php из массива в файл!