带有会话消息的 Laravel 重定向并不总是持续到我的请求中

Laravel redirect with session message does not always persist to my request

提问人:dranieri 提问时间:2/4/2016 更新时间:2/4/2016 访问量:1735

问:

我有一个用Laravel构建的管理工具,用户可以在其中对单个记录执行某些操作。

代码的构建方式是,我正在执行对 URL 的发布,执行必要的代码,更新数据库,然后使用会话消息重定向回。

控制器代码:

return Redirect::back()->with("msg_success", "SMS has been sent!");

现在,从重定向呈现的页面顶部有一个检查,用于显示会话消息(如果存在)。

查看代码:

@if (Session::has('msg_success'))
<div class="col-lg-10">
    <div role="alert" class="alert alert-success alert-dismissible fade in">
        <button aria-label="Close" data-dismiss="alert" class="close" type="button"><span aria-hidden="true">×</span></button>
        <strong>Success! </strong>{{ Session::get('msg_success') }}
    </div>
</div>
<div class="clearfix"></div>
@endif

出于某种原因,有时会显示消息,有时则不显示。我一辈子都想不通为什么。可能是中间件拦截了请求,然后执行了另一个请求,然后它被破坏了吗?我没有看到任何看起来会导致这种情况的东西。

任何想法都会有所帮助。我想过在重定向时使用 URL 参数,例如

return Redirect::to('explicitURL?success=whateverthesuccesmessageis')

但我宁愿不要这样做,因为我的操作在不同的 URL 之间共享。

PHP 会话 重定向 Laravel-5.1

评论

0赞 Derek Pollard 2/4/2016
你为什么不把它变成它自己的数组呢?->with(["msg_success" => "SMS has been sent!"]);
0赞 dranieri 2/4/2016
嗯,不确定我所拥有的有什么区别?我想,如果我想通过的不仅仅是一个success_msg我可以看到好处。
0赞 Derek Pollard 2/4/2016
否则,您不会向视图发送任何数据。
0赞 dranieri 2/4/2016
我很确定我是,我已经这样做了。但是我遇到了一个问题,即消息有时会显示,而其他时间却没有。导致我认为我的会话或中间件可能有问题拦截了我的请求。

答:

3赞 user1012181 2/4/2016 #1

控制器中添加以下内容:

Session::flash('msg_success', 'SMS has been sent!')
return Redirect::back();

视图中:

@if (Session::has('msg_success'))
<div class="col-lg-10">
    <div role="alert" class="alert alert-success alert-dismissible fade in">
        <button aria-label="Close" data-dismiss="alert" class="close" type="button"><span aria-hidden="true">×</span></button>
        <strong>Success! </strong>{{ Session::get('msg_success') }}
    </div>
</div>
<div class="clearfix"></div>
@endif

评论

0赞 dranieri 2/4/2016
有趣的是,在阅读了他们的文档后,这看起来是正确的方法。我试一试,看看问题是否仍然存在。谢谢。
0赞 dranieri 2/4/2016
进一步阅读后,看起来这正在做我目前正在做的事情......laravel.com/docs/5.2/........如果滚动到最底部。
0赞 user1012181 2/4/2016
您没有在控制器中设置会话。如果需要访问 Session 变量,则需要先创建它。
0赞 user1012181 2/4/2016
或者试试这个:return redirect('sms-page')->with('msg_success', 'SMS has been sent!');