Laravel 4如何在视图中显示flash消息?

时间:2013-07-08 12:54:19

标签: session laravel laravel-4

我正在尝试显示我的Flash消息。

这是我的路由文件

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是未定义的。但它实际上也显示了flash消息。

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

11 个答案:

答案 0 :(得分:56)

这对我有用

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

答案 1 :(得分:6)

如果您使用的是 bootstrap-3 ,请尝试下面的脚本以获取警报样式

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

答案 2 :(得分:4)

当您使用->with()设置变量或消息时,它不会在会话闪存中设置变量/消息,而是创建一个在您的视图中可用的变量,因此在您的情况下只需使用{{1而不是$success

如果您想在会话闪存中设置消息,请使用此Session::get('success'),但请记住会话闪存,数据仅适用于下一个请求。

否则,您可以使用Session::flash('key', 'value');存储在会话中

了解更多信息read here

答案 3 :(得分: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中发生的事情是你创建了一个传递给你的create()的变量$ success,但它无法显示$ 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()下不需要额外的代码。

答案 4 :(得分:3)

{{ Session::get('success') }}

这只是回应了会话变量'success'。所以当你使用

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

你看到它的输出以及下一个语句的错误。因为with()函数只在Session中设置值而不会设置为变量。因此@if($success)将导致未定义的变量错误。

正如@Andreyco所说,

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

这应该有效。

您没有看到它的原因可能是因为您正在执行的操作不成功。这不需要您重新安装xampp或修改php.ini。

答案 5 :(得分:2)

Laravel 4.2 我个人使用

Session::flash('key', 'value');
return Redirect::to('some/url');

然后在视图id中首先检查视图中是否存在该键的会话

@if(Session::has('key'))
   {{Session::get('key')}} //this prints out the message or your 'value' in the session::flash method
@endif

它大部分时间都适用于我,我通常将该刀片模板集成到我的视图中,这样我就可以将成功消息从我的代码中推送到视图中。

请注意文档中说明&#34;有时您可能希望仅在下一个请求中将项目存储在会话中。您可以使用Session :: flash方法&#34;所以它是在下一页之后过期的。

希望这会有所帮助

答案 6 :(得分:0)

我刚刚意识到使用Redirect :: to(),当你使用withInput()方法时,链接一个with()函数来传递变量是行不通的。唯一的方法是使用Input :: flash()单独刷新输入,使用with()传递变量,或者使用Session :: flash('key','val')通过会话传递变量,通过session :: get('key')在视图中检索。

答案 7 :(得分:0)

此链接介绍了如何执行此操作http://vegibit.com/flash-messages-in-laravel/

刚试过laravel 5 - 对我有用。

答案 8 :(得分:0)

这应该在localhost和主机上工作,我试过了。

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

答案 9 :(得分:0)

在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

答案 10 :(得分:-3)

我通过将config / session.php中的会话驱动程序从数组更改为文件来修复我的错误!