2012-09-05 12 views
12

Próbuję użyć Symfony2 sessions.I zrobićJak korzystać z przestrzeni nazw sesji w Symfony2

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

To działa. Ale chcę używać przestrzeni nazw w sesji. Dokumentacja mówi

class NamespacedAttributeBag 

udostępnia tę funkcję, ale nie mogę dowiedzieć się, jak zaimplementować to

Odpowiedz

14

Wystarczy otworzyć config.yml i po import dodać:

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

Wygląda to tak:

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

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

framework: 
# ... 
+1

FYI: to nie zadziała w Symfony 3, ponieważ wyodrębniły one wszystkie te parametry klasy. –

8

należy przedefiniować obsługę sesji, a także określić usługi dla torbie atrybutu (jeśli będziesz sprawdzić domyślną implementację session.attribute_bag you” zobaczysz, że ta usługa ma tylko atrybut klasy).

i wstrzyknąć swoją nową usługę na nowo usługę sesji w tam

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

Dziękuję bardzo. To było naprawdę pomocne – aditya

+3

wow - doktorzy naprawdę nie powinni nawet wspominać o NamespacedAttributeBag bez wchodzenia w szczegóły dotyczące sposobu korzystania z niego. po uderzeniu głową w sesję $ $-> registerBag(), cieszę się, że mogę znaleźć to rozwiązanie! – Casey

+1

To pomogło dużo, ale dlaczego nie jest atrybutem konsekwentnym. Ustawiłem niektóre właściwości i następne wywołanie funkcji, wracają do domyślnej? – gprusiiski

3

Ponieważ możliwe jest również użycie komponentu HTTPFoundation poza Symfony2, sposób t o wdrożenie NamespacedUserBags jest następujący:

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

Rejestruj tyle worków, ile chcesz, ale upewnij się, aby to zrobić przed rozpoczęciem sesji. Teraz można przełączać za pomocą worków getBag():

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

i dostęp do przestrzeni nazw torbę z typowych metod:

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

print_r($activeBag->get('tokens')); 
Powiązane problemy