2012-07-17 13 views
6

सिम्फनी 2 में serialize() और deserialize() विधियों में कौन से गुण (और क्यों) शामिल किए जाने चाहिए?सिम्फनी 2 उपयोगकर्ता कक्षा में कौन से गुणों को धारावाहिक/deserialized किया जाना है?

अभी के लिए मैं id क्षेत्र है और यह सिर्फ काम करता है, लेकिन मैं जानना चाहते हैं क्यों और क्या User कक्षा में serialize() के प्रयोजन के है। आदेश में इस संदेश से बचने के लिए:

आप EntityUserProvider एक पहचानकर्ता वाले करता है कि से एक उपयोगकर्ता को ताज़ा नहीं कर सकते। उपयोगकर्ता ऑब्जेक्ट को सिद्धांत द्वारा मैप किए गए स्वयं पहचानकर्ता के साथ क्रमबद्ध किया जाना है।

Class User implements AdvancedUserInterface, \Serializable 
{ 
    /** 
    * @return string 
    */ 
    public function serialize() 
    { 
     return serialize($this->id); 
    } 

    /** 
    * @param string $data 
    */ 
    public function unserialize($data) 
    { 
     $this->id = unserialize($data); 
    } 
} 

जबकि \Serializable को लागू करने के बिना और सभी गुण protected साथ, मैं हो रही है:

Symfony \ घटक \ सुरक्षा \ कोर \ प्रमाणीकरण \ टोकन \ UsernamePasswordToken :: serialize() चाहिए एक स्ट्रिंग या नल लौटें।

उत्तर

4

आपको equality check में उपयोग किए जाने वाले उपयोगकर्ता नाम और फ़ील्ड को क्रमबद्ध/deserialize करने की आवश्यकता है। आपको id संपत्ति को क्रमबद्ध करने की आवश्यकता नहीं है जब तक कि यह आपके ऐप में बदला जा सके।

+0

मदद के लिए धन्यवाद। हालांकि आईडी को क्रमबद्ध करने के बिना (उदा। केवल उपयोगकर्ता नाम) मुझे मिल रहा है "आप EntityUserProvider से किसी उपयोगकर्ता को रीफ्रेश नहीं कर सकते हैं जिसमें पहचानकर्ता नहीं है।" ... – gremo

+0

ठीक है। तब सिद्धांत विशिष्ट है। आपको इस मामले में इसे क्रमबद्ध करना चाहिए। –

+0

यदि आप उपयोगकर्ता ऑब्जेक्ट को रीफ्रेश करने के तरीके को ओवरराइट नहीं कर रहे हैं, तो आपको निश्चित रूप से आईडी की आवश्यकता है। इस विषय पर एसएफ 2 दस्तावेज में कुछ वाक्यों हैं: "आईडी सबसे महत्वपूर्ण मान है जिसे क्रमबद्ध करने की आवश्यकता है क्योंकि refreshUser() विधि आईडी का उपयोग करके प्रत्येक अनुरोध पर उपयोगकर्ता को पुनः लोड करती है। अभ्यास में, इसका मतलब है कि उपयोगकर्ता ऑब्जेक्ट serialized ऑब्जेक्ट से आईडी का उपयोग कर प्रत्येक अनुरोध पर डेटाबेस से पुनः लोड किया गया है। यह सुनिश्चित करता है कि उपयोगकर्ता के सभी डेटा ताजा है। " –