2011-06-22 6 views
12

मुझे लगता है कि शीर्षक यह सब पूछता है। बहुत आसान, मेरे पास एक इकाई है:क्या कर सकते हैं एक सरणी से एक नई इकाई हाइड्रेट?

class User { 
    private $id; 
    private $name; 
    private $username; 
} 

सभी उपयुक्त सेटर्स और गेटर के साथ। मैं एक सरणी है:

array('name' => 'joe', 'username' => 'shmoe'); 

और मैं इस तरह कुछ करने के लिए सक्षम होना चाहते हैं: एक वस्तु काफी आसान होगा

Some\Unknown\Doctrine\Object::hydrateFromArray($array); 

जाहिर है यह हाइड्रेट करने के लिए एक समारोह का निर्माण, लेकिन निश्चित रूप से सिद्धांत होना आवश्यक है कुछ इसे पूरा करने के लिए निर्माण?

उत्तर

17

यह पता लगाया। भंडार को देखते हुए:

//for odm 
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array); 

मैं एक ही ORM के लिए किया जा सकता है, तो पता नहीं है, लेकिन मैं इस समय ODM उपयोग कर रहा हूँ।

+4

इसकी मोंगोडीबी की तरह दिखता है? – nvvetal

+0

यह केवल सिद्धांत \ ODM \ MongoDB \ Hydrator \ HydratorInterface के लिए काम करता है। सभी डेटाबेस प्रकारों के लिए नहीं। –

3

इकाइयों के साथ सेटर्स और गेटर्स बनाने के लिए यह आपके ऊपर निर्भर है।

class User 
{ 
    private $id; 
    private $name; 
    private $username; 

    public function fromArray($array) 
    { 
     // Code to fill the object here. 
    } 
} 

इसके अलावा कुछ भी नहीं है जो कहता है कि आप इसे निर्माता में भी लागू नहीं कर सकते हैं। याद रखें, सिद्धांत 2 इकाइयों को मुख्य वर्ग से कुछ भी प्राप्त नहीं होता है जबतक कि आप इसे स्वयं नहीं करते। यह सिर्फ इस पर कार्य करता है।

+1

क्या अगर आप अपने इकाई में एक रिश्ता नहीं है? आप अपनी इकाई में ईएम के इंजेक्शन से कैसे बचेंगे? (संबंधित ऑब्जेक्ट/ऑब्जेक्ट्स प्राप्त करने के लिए, आपको ईएम की आवश्यकता होगी) – thexpand

3

आप Serializer घटक इस्तेमाल कर सकते हैं:

$user = $serializer->deserialize($data, 'Namespace\User', 'json'); 

http://symfony.com/doc/current/components/serializer.html#deserializing-an-object

+0

सिम्फनी धारावाहिक घटक जेसन के deserialization का समर्थन नहीं करता है। हालांकि, जेएमएस सीरियलाइज़र करता है। –

+0

आपको क्या लगता है कि Symfony serializer घटक जेसन का समर्थन नहीं करता है? मैं जेसन पर deserialze करने के लिए हर समय इसका उपयोग कर रहा हूं और हमेशा जेएम पर सिम्फनी धारावाहिक घटक का उपयोग करने की सिफारिश करता हूं - जिसे आंशिक रूप से त्याग दिया जाता है। सिम्फनी सीरियलाइज़र कितना लचीला है यह एक महान पोस्ट है: http://thomas.jarrand.fr/blog/serialization/ – HKandulla

संबंधित मुद्दे