2012-09-05 11 views
12

में namespaced सत्र का उपयोग करने के मैं उपयोग करने के लिए symfony2 sessions.I इसकैसे Symfony2

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

यह काम करता है करना कोशिश कर रहा हूँ। लेकिन मैं सत्र में नेमस्पेस का उपयोग करना चाहता हूं। प्रलेखन कहते हैं

class NamespacedAttributeBag 

कि सुविधा प्रदान करता है, लेकिन मैं समझ नहीं कैसे लागू करने के लिए यह

उत्तर

14

में सत्र सेवा नए सिरे से परिभाषित करने के लिए बस अपने config.yml खोलने के लिए और बाद आयात जोड़ें:

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

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

framework: 
# ... 
:

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

यह इस तरह दिखता है

+1

एफवाईआई: यह सिम्फनी 3 में काम नहीं करेगा, क्योंकि उन्होंने इन सभी वर्ग पैरामीटर को फटकारा है। –

8

आप सत्र सेवा को फिर से परिभाषित करना चाहिए और यह भी (अपनी विशेषता बैग के लिए सेवा को परिभाषित करता है, तो आप session.attribute_bag के डिफ़ॉल्ट कार्यान्वयन की जांच करेंगे आप ' देखेंगे कि इस सेवा में केवल कक्षा विशेषता है)।

और अपनी नई सेवा इंजेक्षन वहाँ

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

एक बहुत धन्यवाद। यह वास्तव में उपयोगी था – aditya

+3

वाह - दस्तावेजों को वास्तव में नाम का उपयोग करने के बारे में अधिक जानकारी के बिना नामस्थान एट्रिब्यूटबैग का भी उल्लेख नहीं करना चाहिए। मेरे सिर को $ सत्र के खिलाफ टक्कर देने के बाद-> रजिस्टरबैग() मुझे यह समाधान मिलकर खुशी हुई! – Casey

+1

इससे बहुत मदद मिली लेकिन विशेषता लगातार क्यों नहीं है। मैंने कुछ गुण सेट किए हैं और अगली फंक्शन कॉल वे डिफ़ॉल्ट पर वापस आ गए हैं? – gprusiiski

3

क्योंकि सिम्फनी 2 के बाहर HTTPFoundation घटक का उपयोग करना भी संभव है, जिस तरह से टी ओ लागू NamespacedUserBags इस प्रकार है: आप चाहते हैं

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

रजिस्टर के रूप में कई बैग के रूप में है, लेकिन यह करने के लिए इससे पहले कि आप सत्र शुरू सुनिश्चित करें। अब आप getBag() का उपयोग कर बैग के बीच स्विच कर सकते हैं:

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

और ठेठ तरीकों के साथ namespaced बैग का उपयोग:

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

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