CakePHP - 如何在Session中推送数组?

时间:2011-06-15 20:15:59

标签: php model-view-controller cakephp

如果我有以下内容,

$this->Session->write('ScoreCardCriteria', 'test');

并且想要将另一个项目添加到ScoreCardCriteria作为项目数组,我该怎么做?

使用常规PHP,它将类似于

$_SESSION['ScoreCardCriteria'][] = 'test';

我想出了这个:

    $new_array = array_merge((array)$this->Session->read('ScoreCardCriteria'), array('test'));
    $this->Session->write('ScoreCardCriteria', $new_array);

但如果有更多的“蛋糕”方式,我会喜欢它。

2 个答案:

答案 0 :(得分:12)

你可以这样做:

$this->Session->write('ScoreCardCriteria', array( 'test' ) );

然后:

$data = $this->Session->read('ScoreCardCriteria');
$data[] = 'test';
$this->Session->write('ScoreCardCriteria', $data);

但是,老实说,CakePHP在内部使用$ _SESSION对象,只是覆盖默认的会话处理程序。 ->write唯一能做的就是解析一个你没做过的点标记集路径(看起来像foo.bar.x)。如果您正在观看特定值,请回显调试信息。如果直接修改$_SESSION,则不应该受到伤害。

答案 1 :(得分:2)

您需要读取会话数据,然后将其与要追加的数据合并。您还应该在执行此操作之前检查会话数据是否存在:

if ($this->Session->check('ScoreCardCriteria')) {
    $this->Session->write('ScoreCardCriteria', am(
       $this->Session->read('ScoreCardCriteria'),
       array('test')
    ));
} else {
    $this->Session->write('ScoreCardCriteria', array('test'));
}

希望有所帮助。