2012-08-08 35 views
8

मैं इसे एक छोटी परियोजना के लिए उपयोग करके ज़ेंड फ्रेमवर्क 2 के साथ पकड़ना चाहता हूं। मैं विभिन्न ब्लॉग लेख, दस्तावेज़ और निश्चित रूप से अक्रबत (रोब एलन) द्वारा शानदार ट्यूटोरियल के माध्यम से रहा हूं।ज़ेंड फ्रेमवर्क 2 मॉड्यूल के लिए सही या पसंदीदा निर्देशिका संरचना क्या है?

हालांकि, मेरे सभी पढ़ने में मैंने मॉड्यूल के लिए सही या पसंदीदा निर्देशिका संरचना पर किसी भी स्पष्टीकरण में नहीं आया है जो ज़ेंड फ्रेमवर्क 2 अपेक्षा करता है।

Akrabat tutorial में रोब एलन का उदाहरण मॉड्यूल एक मॉडल और नियंत्रक का उपयोग करता है। निर्देशिका संरचना वह चुना था:

/module 
    /Album 
     /config 
     /src 
      /Album 
       /Controller 
       /Form 
       /Model 
     /view 
      /album 
       /album 

यह वह जगह है सब ठीक है, लेकिन क्या हुआ अगर एक मॉड्यूल एकाधिक नियंत्रकों और मॉडल था के रूप में आप एक साइट है कि एक से अधिक पृष्ठों/अनुभागों था में उम्मीद करेंगे? क्या मैं अपने सभी नियंत्रकों को/src/album/नियंत्रक निर्देशिका में रखूंगा, या क्या मैं प्रत्येक अतिरिक्त मॉडल और संबंधित नियंत्रकों और विचारों के लिए/src/xxx/निर्देशिका का एक और सेट बनाउंगा?

निर्देशिका में/देखें, क्या मैं इसे विभिन्न नियंत्रकों द्वारा उपयोग किए गए विचारों के प्रत्येक सेट के लिए उप-निर्देशिकाओं में विभाजित करता हूं?

मुझे लगता है कि मेरे लिए भ्रम इस तथ्य से आता है कि रॉब के उदाहरण में, उसका मुख्य नियंत्रक/मॉडल मॉड्यूल के समान नाम है। तो उनके एल्बम मॉड्यूल में एक निर्देशिका है, मॉडल मॉडल, नियंत्रकों और विचारों के लिए निर्देशिका। अगर मैं एल्बमसे अपने मॉड्यूल नाम बदलने के लिए थे, कहते हैं, MyModule निर्देशिका संरचना तो बन गयी:

/module 
    /MyModule 
     /config 
     /src 
      /Album 
       /Controller 
       /Form 
       /Model 
     /view 
      /MyModule 
       /album 

यह तो पालन करेंगे कि एक अतिरिक्त मॉडल, कलाकार, और संबद्ध नियंत्रकों होगा इस प्रकार व्यवस्थित:

/module 
    /MyModule 
     /config 
     /src 
      /Album 
       /Controller 
       /Form 
       /Model 
      /Artist 
       /Controller 
       /Form 
       /Model 
     /view 
      /MyModule 
       /album 
       /artist 

यदि ऊपर नहीं है, तो यह संरचना क्या होगी?

यह निश्चित रूप से सभी मानते हैं कि ZF2 सख्त संरचना की अपेक्षा करता है। यदि यह मामला नहीं है तो स्पष्ट रूप से मैं इसे जिस तरह से चाहता हूं उसे व्यवस्थित कर सकता हूं।

उत्तर

14

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

'डिफ़ॉल्ट' autoloader (Module.php देखें) है, जो आप उदाहरण के अधिकांश में पा सकते हैं केवल मानती है कि आपके ModuleName कक्षाएं ./src/ModuleName निर्देशिका में पाया जाएगा कि:

// ./modules/ModuleName/Module.php 
public function getAutoloaderConfig() 
{ 
    return array(
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
      ), 
     ), 
    ); 
} 

मुझे लगता है तुम्हें पता है यही वह है जो __NAMESPACE__ भागों का मतलब है।

तो, यदि आपके पास Cat नामक मॉड्यूल है, तो इसकी कक्षा ./modules/Cat/src/Cat में पाए जाने की उम्मीद की जाएगी।

यदि आप अपने आवेदन में कुछ नई कार्यक्षमता जोड़ने का निर्णय लेते हैं, तो आप Dog नामक एक और मॉड्यूल जोड़ देंगे और इसकी कक्षा फ़ाइलों को ./Dog/src/Dog में रखें।

हालांकि, इसका कोई मतलब नहीं है कि आपको इसे इस तरह से करना है। आप अपने सभी पशु संबंधित वर्गों को एक मॉड्यूल में भी डाल सकते हैं उदा। Animals। आप इस तरह देखने के लिए अपनी autoloader को संशोधित करने के लिए होगा:

// ./modules/Animals/Module.php 
public function getAutoloaderConfig() 
{ 
    return array(
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       'Cat' => __DIR__ . '/src/Cat', 
       'Dog' => __DIR__ . '/src/Dog', 
      ), 
     ), 
    ); 
} 

... और ./modules/Animal/src/Cat/Persian.php और ./modules/Animal/src/Dog/Collie.php की तरह फाइलों में अपनी कक्षाओं जगह।

एक बात जो मैं सुझाऊंगा, हालांकि मॉड्यूल के बारे में सोचना अलग-अलग इकाइयों के रूप में अन्य मॉड्यूल के बारे में कुछ भी नहीं जानता है। एक 'वास्तविक जीवन' उदाहरण के रूप में - मेरे पास एक ऐसा एप्लिकेशन है जिसमें फ्रंटेंड (एचटीएमएल, सीएसएस, आदि) और एक एपीआई कार्यक्षमता है। - डेटाबेस कॉन्फ़िगरेशन, db तालिका कक्षाएं, मानचित्रकारों, मॉडल, प्रमाणीकरण कक्षाएं, आदि शामिल हैं मूल रूप से सब कुछ है कि किसी भी अन्य मॉड्यूल आवश्यकता हो सकती है

  • Application:

    मैं 3 मॉड्यूल है।

  • Api - नियंत्रक एक विशिष्ट प्रारूप में अनुरोध की अपेक्षा करते हैं और इसे आउटपुट करते हैं। JSON (यानी कोई विचार आवश्यक)। इस मॉड्यूल में कक्षाएं अनुप्रयोग मॉड्यूल से कक्षाओं का उपयोग कर रही हैं क्योंकि मुझे अभी भी सभी डेटाबेस कार्यक्षमता की आवश्यकता है, लेकिन यह सब अलग होने से मुझे एपीआई तर्क से एप्लिकेशन-व्यापी तर्क को अलग किया जाता है। मैं इस मॉड्यूल को चीर कर सकता था जिसे मैं चाहता था और यह कुछ और नहीं तोड़ देगा।
  • Website - मॉड्यूल केवल पृष्ठों को प्रस्तुत करने के लिए ज़िम्मेदार है। फिर भी, यह एप्लिकेशन से कक्षाओं का उपयोग करता है क्योंकि मैं डेटाबेस से डेटा प्रस्तुत करने में सक्षम होना चाहता हूं और उपयोगकर्ताओं को इसे संपादित करने देता हूं लेकिन मैं इस मॉड्यूल में पूरी तरह से कार्यक्षमता नहीं चाहता क्योंकि एपी को भी इसकी आवश्यकता है।

मेरे ./config/application.config.php भार उन्हें इस क्रम में:

return array(
    'modules' => array(
     'Application', 
     'Api', 
     'Website', 
    ), 
    // all other entries 
); 

इसका मतलब है कि मैं अन्य सभी मॉड्यूल से आवेदन कक्षाओं की पहुंच है। अगर मैं किसी कारण से अपना एपीआई अक्षम करना चाहता था, तो मैं सिर्फ एपीआई निर्देशिका को हटा दूंगा और मेरा फ्रंट एंड अभी भी काम करेगा।

आशा है कि इससे मदद मिलती है! :)

टीएल; डीआर आप फ़ाइलों को किसी भी तरह से बना सकते हैं, बस ऑटोलोडर को सही तरीके से कॉन्फ़िगर करना न भूलें।