【问题标题】:Laravel 4 how to display flash message in view?Laravel 4 如何在视图中显示 Flash 消息?
【发布时间】:2013-07-05 19:37:16
【问题描述】:

我正在尝试显示我的 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

【问题讨论】:

  • 当您使用-&gt;with() 时,它不会在闪存中设置会话,而是创建一个变量,因此在您的情况下,只需使用 $session 而不是 Session::get()
  • 我得到 $session undefined :(
  • 抱歉打错了$success
  • 是的,这就是我的想法,但我也得到未定义的变量:成功
  • 你必须做@if(isset($success)),因为你调用同一个视图一次有成功变量,一次没有它

标签: session laravel laravel-4


【解决方案1】:

这对我有用

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

【讨论】:

  • 我实际上已经尝试过了,但仍然没有,我的 xampp 安装可能有问题吗?我需要编辑我的 php ini 文件中的任何内容吗?
  • 不,您不需要更新 php.ini 文件。这应该是开箱即用的。
  • 我清楚地看到,你根本没有做错。试着再看看这个,也许有帮助laravel.com/docs/responses#redirects
  • @MorneZeelie 你能澄清一下“根本不工作”吗?您是否收到错误消息(请发布它们)或奇怪的结果(解释您所看到的)。 Andreayco 的回答很完美。
  • @Alex-Info.net 我的意思是它是空白的。什么都没有显示,甚至没有错误。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    更多信息read here

    【讨论】:

    【解决方案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 - 使用返回重定向和FlashMessage

    return Redirect::route('users/groups')->withFlashMessage('Group Created Successfully.');
    

    然后在您的查看页面上,

    @if (Session::has('flash_message'))
    {{ Session::get('flash_message') }}
    @endif
    

    方法2更简洁,不需要create()下的额外代码。

    【讨论】:

    • 能告诉我withFlashMessage的API吗?
    【解决方案5】:
    {{ Session::get('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。

    【讨论】:

      【解决方案6】:

      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
      

      它在大多数情况下都对我有用,而且我通常会将刀片模板集成到我的视图中,这样我就可以将成功消息从我的代码中推送到视图中。

      请注意,文档中声明“有时您可能希望仅在下一次请求时将项目存储在会话中。您可以使用 Session::flash 方法执行此操作”所以​​是的,它会在下一个请求后过期页面。

      希望对你有帮助

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          此链接描述了如何做到这一点http://vegibit.com/flash-messages-in-laravel/

          刚刚尝试使用 laravel 5 - 对我有用。

          【讨论】:

            【解决方案9】:

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

            <?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 中的会话驱动程序从 array 更改为 file 来修复我的问题!

                【讨论】:

                  猜你喜欢
                  • 2014-05-22
                  • 2019-08-22
                  • 2017-02-07
                  • 1970-01-01
                  • 2021-08-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-23
                  • 1970-01-01
                  相关资源
                  最近更新 更多