2013-02-20 63 views
5

मैंने स्क्रैच से एक सिम्फनी 2 प्रोजेक्ट शुरू किया है जहां मैंने FOSUserBundle स्थापित किया था।yml- आधारित इकाइयों के संबंध में FOSUserBundle का उपयोग करें

फिर, मैंने लिखा है (वास्तव में, ओआरएम डिजाइनर के साथ जेनरेट किया गया है) कुछ संस्थाएं जिनके बीच, और उपयोगकर्ता इकाई के बीच संबंध होने की आवश्यकता है।

मैं ItemsUsers से संबंधित, CollectionsUsers से संबंधित है कि समूह Items, और इतने पर।

जब से मैं FOSUserBundle इस्तेमाल किया मैं केवल एक बुनियादी उपयोगकर्ता वर्ग (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md, कदम 3a) एनोटेशन का उपयोग परिभाषित किया गया है, कोई config/doctrine फ़ोल्डर और उस में कोई User.yml फ़ाइल।

मैंने फिर MyBundle/Resources/config/doctrine फ़ोल्डर बनाया और ऊपर उल्लिखित yml फ़ाइलों को जोड़ा।

जब मैं कमांड लाइन उपकरण के साथ इकाइयों को उत्पन्न करने का प्रयास करता हूं तो सब कुछ ठीक काम करता है: यह मेरी yml फ़ाइलों से संस्थाएं बनाएगा।

हालांकि, इस बिंदु पर, ऊपर ब्राउज़रों में वह URL यहां लॉगिन पहले काम (जब मैं केवल FOSUserBundle स्थापित किया था) लोड करने की कोशिश इस त्रुटि फेंक देगा:

MappingException: No mapping file found named '/var/www/concert/src/X/MyBundle/Resources/config/doctrine/User.orm.yml' for class 'X\MyBundle\Entity\User'.

के बाद कार्रवाई, इस तरह के सीआरयूडी तर्क उत्पन्न करने के रूप में, जब तक मेरे पास config/doctrine फ़ोल्डर में *.orm.ym एल फ़ाइल है, तब तक काम नहीं करेगा। अगर मैं उन्हें हटा देता हूं, सीआरयूडी पीढ़ी काम करेगी, लेकिन वास्तविक mysql टेबल की पीढ़ी नहीं होगी।

इनके साथ जुगलिंग मुझे एक बिंदु पर ले जाता है जहां मैं टेबल भी प्राप्त कर सकता हूं, लेकिन फिर वास्तविक ऐप काम नहीं करता है अगर मैं किसी भी यूआरएल का उपयोग करने का प्रयास करता हूं जहां नव निर्मित सीआरयूडी शामिल है क्योंकि संस्थाएं हैं yml पर आधारित (जिसे मैं चीजों को "काम करने" के लिए हटा देता हूं) इसमें कोई मैपिंग ज्ञान नहीं होगा।

क्या यह मूल रूप से गलत है? FOSUserBundle के आधार पर उपयोगकर्ता इकाई के साथ संबंध में yml- आधारित इकाइयां रखने के लिए और अभी भी अच्छी कमांड लाइन पीढ़ी के उपकरण प्राप्त करने में सक्षम हैं?

उत्तर

6

आपके द्वारा वर्णित समस्या का मिश्रण कॉन्फ़िगरेशन प्रारूपों (यमल और मैं एनोटेशन मानता हूं) से उत्पन्न होता है। आप आसानी से इसे अपने मॉडलों में एनोटेशन को हटाकर और यमल-फाइलों के साथ बदलकर इसे अपने मॉडल में कर सकते हैं।

दुर्भाग्य FOSUserBundle-डॉक्स केवल आप कैसे व्याख्या का उपयोग करना दिखाते हैं, इसलिए यहां YAML प्रारूप में एक त्वरित परिवर्तन जब अपने एक्स \ MyBundle \ इकाई \ उपयोगकर्ता FOSUSerBundle के UserEntity फैली हुई है:

X\MyBundle\Entity\User: 
    type: entity 
    table: fos_user 
    id: 
     id: 
      type: integer 
      strategy: { generator: "AUTO" } 

शेष सामान है FOSUserBundle की देखभाल की गई, क्योंकि बेसमोडेल mapped-superclass है और User.orm.xml में पहले से ही सामग्री का वर्णन करता है, लेकिन आप मौजूदा मानों को प्रतिस्थापित कर सकते हैं या अतिरिक्त मान जोड़ सकते हैं जैसे आप अपने मॉडल के साथ करेंगे।

यदि आप अपने ऐप में एनोटेशन का उपयोग नहीं करते हैं, तो आप साइड इफेक्ट्स को रोकने के लिए उन्हें अपने app/config/config.yml में अक्षम भी कर सकते हैं।

+1

यह पूरी तरह से किया। मुझे संदेह था कि इसे कुछ प्रकार का इशारा होना था जो मैं सिम्फनी को यह स्वीकार करने के लिए दे सकता था।इसका एक अवलोकन यह है कि मुझे तालिका मैपिंग को परिभाषित करने के लिए User.orm.yml में एक पंक्ति भी जोड़ने की आवश्यकता है, क्योंकि डिफ़ॉल्ट रूप से यह उपयोगकर्ता नामक एक तालिका की तलाश करेगा, इसलिए मैंने तालिका जोड़ा: fos_user (जिस नाम को मैं विरासत में मिला मैंने फोस बंडल से उपयोगकर्ता तालिका जेनरेट की)। – cbaltatescu

+1

ओह, आप सही हैं 'दस्तावेज़: fos_user' का उल्लेख दस्तावेज़ों में किया गया है, लेकिन मैंने इसे yaml में याद किया। इसे तुरंत ठीक कर देगा। – dbrumann

+1

आप विरासत को कैसे कॉन्फ़िगर करते हैं? मैं इसे आज़माता हूं लेकिन 'php ऐप/कंसोल सिद्धांत: स्कीमा: अद्यतन - डंप-एसक्यूएल' रिटर्न 'तालिका बनाते हैं fos_user (आईडी नल, प्राथमिक कुंजी (आईडी) नहीं) निर्णायक चरित्र सेट utf8 COLLATE utf8_unicode_ci इंजन = InnoDB'। यह विरासत कॉलम नहीं जोड़ता है। –