【问题标题】:Why is Laravel's Session::flash behaving inconsistently?为什么 Laravel 的 Session::flash 行为不一致?
【发布时间】:2016-01-08 22:07:03
【问题描述】:

在开发 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() 中的会话转储会显示闪存数据,但有时会丢失。

出了什么问题?

【问题讨论】:

    标签: php laravel session


    【解决方案1】:

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

    为了解决这个问题,我在 AJAX 调用触发的函数的第一行添加了Session::reflash(),如下所示:

    <?php
    
    class AjaxController {
      public function getinfo() {
        Session::reflash();
    
        return "here's that data you wanted";
      }
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多