在使用Laravel 4.2应用程序时,我最近注意到对Session::flash
(以及类似Input::flash
)的调用有时表现不一致。
一个特殊示例:我想从edit
函数中刷新一些数据,以便我可以在相应的update
函数中访问它。 edit
视图包含一个相当简单的表单,包括在用户从下拉列表中选择一个选项后通过AJAX调用加载的一个字段。这是我的MCVE:
在MyController.php
:
<?php
class MyController {
public function edit($id) {
Session::flash('somevar', "myvalue");
return View::make('edit');
}
public function update($id) {
var_dump(Session::all()); die();
if (Session::has('somevar')) {
// do stuff
}
return Redirect::to('/');
}
}
?>
在AjaxController.php
:
<?php
class AjaxController {
public function getinfo() {
return "here's that data you wanted";
}
}
?>
在edit.blade.php
:
<script type="text/javascript">
$('form select[name=foo]').change(function() {
$.ajax({
url: '/ajax/getinfo'
success: function(data) {
alert(data);
}
});
});
</script>
<a href="/update/1">Update</a>
有时update()
中的会话转储会显示Flash数据,但有时会丢失。
出了什么问题?
答案 0 :(得分:1)
问题是填充其中一个字段的额外AJAX调用。由于这被视为一个请求,因此该请求的闪存数据是活动的,但不是下一个请求。
要解决此问题,我将Session::reflash()
添加到AJAX调用触发的函数的第一行,如下所示:
<?php
class AjaxController {
public function getinfo() {
Session::reflash();
return "here's that data you wanted";
}
}
?>