是否可以将数组存储为Laravel中的闪存数据?

时间:2013-11-04 21:48:43

标签: php laravel session-variables

我一直在寻找一种方法来做到这一点。我知道可以使用以下内容在会话中存储数组:Session::push('user.teams', 'developers');

是否可以使用闪存数据执行相同的操作?像Session::flashpush('user.teams', array('developers', 'designers'));这样的东西会很棒。

此时我的用例主要有以下几点:

Session::flash('flash_message', $validator->messages());

4 个答案:

答案 0 :(得分:10)

据我所知,你可以做到。我已经检查了以防万一:

Session::flash('test', array('test1', 'test2', 'test3'));

... After the request

dd(Session::get('test'));

// array(2) { [0]=> string(5) "test1" [1]=> string(5) "test2" [2]=> string(5) "test3" }

有效。您也可以像Christopher Morrissey刚评论的那样序列化一个数组或对象

答案 1 :(得分:4)

我用这个:

Session::flash($key, array_merge((array)Session::get($key), array($value)));

答案 2 :(得分:2)

我创建了这个助手类:

<?php

class Flash {
    public static function push($key, $value) {
        $values = Session::get($key, []);
        $values[] = $value;
        Session::flash($key, $values);
    }
}

它允许您将多个项目推送到同一个键,以便在获取时始终返回一个数组。

用法:

 Flash::push('success','Feature saved');

Twig模板(Blade不应该有太大的不同):

{% if session_has('success') %}
    <div class="alert alert-block alert-success fade in">
        <button class="close" data-dismiss="alert">&times;</button>
        {% for msg in session_get('success') %}
            <p><i class="fa-fw fa fa-check"></i> {{ msg }}</p>
        {% endfor %}
    </div>
{% endif %}

在您的方案中,您可能会像这样使用它:

Flash::push('flash_message', 'user.teams');
Flash::push('flash_message', 'developers');

答案 3 :(得分:0)

Laravel 8

如果您想将用户输入的信息存储为数组然后单独拉取,这是我发现使用最新版本 Laravel 的最有效方法。我正在使用 Madlibs 应用程序。

$req->session()->put([
  'adj1' => $req->input('adj1'),
  'noun1' => $req->input('noun1'),
  'place' => $req->input('place'),
]);

return $req->session()->flash('test',
   array('adj1', 'noun1', 'place',
));

我希望这对未来的用户有所帮助。