CakePHP - как вставить массив в сессию? - PullRequest
5 голосов
/ 16 июня 2011

Если у меня есть следующее,

$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 ]

12 голосов
/ 16 июня 2011

Вы можете сделать это:

$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 напрямую.

2 голосов
/ 16 июня 2011

Вам необходимо прочитать данные сеанса, а затем объединить их с данными, которые будут добавлены.Вы должны также проверить, существуют ли данные сеанса, прежде чем делать это:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...