CakePHP-如何在Session中推送数组


CakePHP - how to push array in Session?

如果我有以下内容,

$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);

但如果有一种更"蛋糕"的方式,我会很高兴的。

您可以这样做:

$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,应该不会有什么坏处。

您需要读取会话数据,然后将其与要附加的数据合并。在这样做之前,您还应该检查会话数据是否存在:

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

希望能有所帮助。