2012-09-05 8 views
12

Estoy tratando de utilizar Symfony2 sessions.I hacer esto¿Cómo utilizar el namespace Sesiones en Symfony2

$session = $this->getRequest()->getSession(); 
    $session->set('token','value'); 

Esto funciona. Pero quiero usar el espacio de nombres en la sesión. Documentación dice

class NamespacedAttributeBag 

proporciona esa característica, pero no puedo encontrar la manera de ponerla en práctica

Respuesta

14

Sólo tiene que abrir su config.yml y después de añadir las importaciones:

parameters: 
    session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 

Se ve así:

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 

parameters: 
    session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 

framework: 
# ... 
+1

FYI: esto no funcionará en Symfony 3, ya que arrancaron todos estos parámetros de clase. –

8

Deberá volver a definir servicio de sesión y también definir el servicio para su bolsa de atributos (si va a comprobar la aplicación por defecto de session.attribute_bag que' Veo que este servicio tiene solo atributo de clase).

Y inyectar su nuevo servicio a redefinido servicio de sesión en la que hay

services: 
    session: 
     class: Symfony\Component\HttpFoundation\Session\Session 
     arguments: 
      - @session.storage 
      - @your.session.attribute_bag #service id is defined below 
      - @session.flash_bag 

    your.session.attribute_bag: 
     class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 
+0

Gracias mucho. Fue realmente útil – aditya

+3

wow - los documentos realmente ni siquiera deberían mencionar el NamespacedAttributeBag sin entrar en más detalles sobre cómo usarlo. después de golpear mi cabeza contra $ session-> registerBag() ¡me alegro de encontrar esta solución! – Casey

+1

Esto ayudó mucho pero ¿por qué no es el atributo constante. Configuré algunas propiedades y la siguiente llamada a función volvieron al valor predeterminado? – gprusiiski

3

Porque también es posible usar el Componente HTTPFoundation fuera de Symfony2, la forma t ara aplicar NamespacedUserBags es el siguiente:

use Symfony\Component\HttpFoundation\Session\Session; 
use Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag; 

$session = new Session(); 

//first bag 
$myAttributeBag = new NamespacedAttributeBag('<your_storage_key_1>'); 
$myAttributeBag->setName('<your_tag_name_1>'); 
$session->registerBag($myAttributeBag); 

//second bag 
$myAttributeBag = new NamespacedAttributeBag('<your_storage_key_2>'); 
$myAttributeBag->setName('<your_tag_name_2>'); 
$session->registerBag($myAttributeBag); 

$session->start(); 

Registro tantas bolsas como desee, pero asegúrese de hacerlo antes de empezar la sesión. Ahora se puede cambiar entre el uso de bolsas getBag():

$activeBag = $session->getBag('<your_tag_name>'); 

y acceder a la bolsa de espacio de nombres con los métodos típicos:

$activeBag->set('tokens/a', 'adsf82983asd'); 
$activeBag->set('tokens/b', 'daslfl232l3k'); 

print_r($activeBag->get('tokens'));