【问题标题】:CakePHP - how to push array in Session?CakePHP - 如何在 Session 中推送数组?
【发布时间】:2011-06-15 20:15:59
【问题描述】:

如果我有以下情况,

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

但如果有更“蛋糕”的方式,我会很高兴的。

【问题讨论】:

  • 我想出的方法不太奏效。它只是覆盖了所有的值......

标签: php model-view-controller cakephp


【解决方案1】:

你可以这样做:

$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应该没问题。

【讨论】:

  • 有人知道为什么这被否决了吗?这与 7 分钟后发布的另一个答案几乎相同,并且没有被否决。
  • 不确定...这就是我最终所做的并且工作得很好。谢谢
  • 不客气。因为我抱怨了几个人还是赞成它:)。我只是好奇我做错了什么应该得到-1
  • 意识到这是很久以前的事了,但给出的关于必须直接使用 $_SESSION 的答案似乎仍然有效。基本上,Cake 3.x 不能在其本地会话方法中处理数组。我已经发布了解释@​​987654321@
【解决方案2】:

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

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 2015-08-14
    • 2018-09-14
    • 2012-07-22
    • 2014-11-23
    • 2020-06-19
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多