为什么Laravel的Session :: flash行为不一致?

时间:2016-01-08 22:07:03

标签: php laravel session

在使用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数据,但有时会丢失。

出了什么问题?

1 个答案:

答案 0 :(得分:1)

问题是填充其中一个字段的额外AJAX调用。由于这被视为一个请求,因此该请求的闪存数据是活动的,但不是下一个请求。

要解决此问题,我将Session::reflash()添加到AJAX调用触发的函数的第一行,如下所示:

<?php

class AjaxController {
  public function getinfo() {
    Session::reflash();

    return "here's that data you wanted";
  }
}

?>