将数据添加到会话

时间:2015-02-22 00:09:53

标签: php silex

真的很简单。

在Silex中,文档说要将数据添加到您使用的会话中:

 $app['session']->set('user', array('username' => $username));

这样可以正常工作,但我正在为会话分配大量数据,这只会使代码无法读取这么大的数组。所以,在我的应用程序中,我使用:

 $app['session']->set('session_name', $array);

两者都有效。但是,我的应用程序是多个页面,我想向会话添加数据,而不是覆盖它,这就是我的方法。

我已检查了源代码,但我在API文档中看不到任何内容(我可能会遗漏它),但有$app['session']->add('session_key', $data)类似于$array[]的内容?

或者,我是提取会话数据的最佳选择,将其添加到新数据然后写入会话?

1 个答案:

答案 0 :(得分:1)

会话API非常简约,没有您需要的功能。

快速解决方法是检索当前值,添加到该值然后再次设置:

$foo = $app["session"]->get("foo", array());
$foo[] = $newData;
$app["session"]->set("foo", $foo);

如果您准备深入研究代码,您也可以创建自己的具有此功能的会话处理程序:

class MySessionHandler extends Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler
{
    public function addToKey($key, $value)
    {
        $foo = $this->get($key, array());
        $foo[] = $value;
        $this->set($key, $foo);

    }
}

然后thell Silex使用它:

$app['session.storage.handler'] = $app->share(function ($app) {
    return new MySessionHandler($app['session.storage.save_path']);
});