2011-06-15 13 views
5

Si tengo la siguiente,CakePHP: ¿cómo empujar la matriz en la sesión?

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

y desea añadir otro elemento a ScoreCardCriteria como una serie de artículos, ¿cómo podría hacerlo?

Con PHP regular, sería algo así como

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

me ocurrió esto:

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

Pero me encantaría que si había una manera más "torta" que hacer eso.

+0

El método que se me ocurrió no funcionó del todo. Simplemente sobrescribió todos los valores ... –

Respuesta

12

Usted puede hacer esto:

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

Y luego:

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

Sin embargo, para ser sincero, CakePHP utiliza el objeto $ _SESSION interna y simplemente anula los manejadores de sesión predeterminado. Lo único que hace ->write es analizar una ruta de conjunto de notación de puntos (que se vería como foo.bar.x) que no está haciendo. Y la información de depuración de eco si está viendo valores particulares. No debería doler si modifica $_SESSION directamente.

+0

¿Alguien sabe por qué se votó negativamente? Es casi lo mismo que la otra respuesta que se publicó 7 minutos después y no votó en contra. –

+0

No estoy seguro ... es lo que terminé haciendo y funcionó muy bien. Gracias –

+0

De nada. Desde que me quejé, varias personas votaron de todos modos :). Solo tenía curiosidad por lo que hice mal para merecer un -1 –

2

Necesita leer los datos de la sesión y luego combinarlos con sus datos para adjuntar. También debe verificar si los datos de la sesión existen antes de hacerlo:

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

Espero que ayude.

Cuestiones relacionadas