क्या यह सिर्फ एक ढांचा है, या यह ढांचा PHP समुदाय के गौरव का प्रतीक है - इसके मेहनती डेवलपर्स, इसलिए बोलने के लिए, एक प्रमुख घटक? विन्यास के एक बिखरने के साथ ... हमारे पीएल के प्यार का विषय, जिसमें एक अच्छा एमवीसी है, इसलिए Zend फ्रेमवर्क सबसे अच्छा PHP फ्रेमवर्क है।
यहां आपको इस प्रश्न का उत्तर नहीं मिलेगा, लेकिन आप सेवा प्रबंधक और मॉड्यूल प्रबंधक के बारे में जानेंगे।

चेतावनी
- यह सामग्री Zend फ्रेमवर्क 2 में जो मैं देख रहा था, उस पर आधारित है, कुछ जगहों पर यहां तक कि संस्करण 1 का भी उल्लेख है। * मुझे नहीं लगता कि यह अन्य संस्करणों के साथ तुलना करते समय एक समस्या बन जाएगी, क्योंकि मूल बिंदुओं पर विचार किया जाता है और वे विश्व स्तर पर बदलने की संभावना नहीं हैं।
- तर्क और अनुवाद में (साथ ही पैराग्राफ 1 में) सकल त्रुटियां हो सकती हैं, मेरा और मूल स्रोत दोनों। सभी को लिंक दिए जाएंगे, और आपका अपना काम नोट [मेरा] के साथ होगा।
- यह उन लोगों के लिए लक्षित है जो Google और मेरे जैसे, भ्रमित हो गए। ब्लॉग, स्पष्टीकरण और अन्तरक्रियाशीलता की तैनाती नहीं होगी। लेकिन दो तस्वीरें और एक किटी होगी।
सामग्री
- मामले
- डिवाइस की रूपरेखा
 - सामान्य संरचना और संबंध
- प्लग-इन
 
- दृश्य
 
- लेखक से
 
- बोनस
मामले
स्रोत , थोड़ा [मेरा] ।
- आवेदन - अंतिम उत्पाद, साइट;
- एक मॉड्यूल एक आवेदन के कार्यात्मक रूप से पूरा किया गया "ब्लॉक" है, जिसमें से कोड मॉडल, प्रतिनिधित्व, नियंत्रक से मिलकर बन सकता है। मॉड्यूल एक वेब एप्लिकेशन की कार्यक्षमता का विस्तार करता है और इसे केवल "अंदर" कार्य कर सकता है; modulesअनुभाग मेंapplication.config.phpमें पंजीकृत हैं
- ModuleManager - मॉड्यूल में हेरफेर करने के लिए एक कंटेनर;
- मॉडल - नियंत्रक, प्रकार, आदि के बीच जोड़तोड़ के लिए सेवा - "तंत्र" मॉड्यूल में सेवा में पंजीकृत हैं सेवा। module.config.phpखंड मेंmodule.config.php।
- ServiceManager - सेवाओं में हेरफेर करने के लिए एक कंटेनर।
- नियंत्रक प्रबंधक - लोडिंग नियंत्रकों ( \Zend\ServiceManager\AbstractFactoryInterfaceया\Zend\ServiceManager\ServiceManager) के लिए सेवाओं और कारखानों के साथ काम करता है। गोदी
- EventManager - एक घटक जो एक या अधिक नामित घटनाओं (ईवेंट) के लिए ईवेंट हैंडलर (श्रोता) को एकत्रित करता है, और इन घटनाओं के प्रसंस्करण को भी आरंभ करता है।
- एक प्लगइन एक वर्ग है जो सभी नियंत्रकों की कार्यक्षमता को किसी तरह से बढ़ाता है।
डिवाइस की रूपरेखा
सामान्य संरचना और संबंध
स्रोत
जब Zend\Mvc\Application , Zend\ServiceManager\ServiceManager ऑब्जेक्ट बनाया और Zend\Mvc\Service\ServiceManagerConfig माध्यम से कॉन्फ़िगर किया जाता है। ServiceManagerConfig को कॉन्फिगरेशन config/application.config.php (या कुछ अन्य एप्लिकेशन कॉन्फिगरेशन जो इसे बनाते समय दिया जाता है) से मिलता है। Zend\Mvc\Service नामस्थान में SharedEventManager सभी सेवाओं और कारखानों में से ServiceManagerConfig केवल तीन के लिए ज़िम्मेदार है: SharedEventManager , EventManager और ModuleManager ।
उसके बाद, Application ModuleManager पुनः प्राप्त करता है। इस बिंदु पर, ServiceManager माध्यम से ModuleManager Zend\Mvc\Service\ServiceListenerFactory में प्रदान की गई सेवाओं और कारखानों को कॉन्फ़िगर करता है। यह दृष्टिकोण हमें मुख्य एप्लिकेशन के कॉन्फ़िगरेशन को सरल बनाने की अनुमति देता है और इन MVC की सेवाओं में किसी भी डिफ़ॉल्ट कॉन्फ़िगरेशन को ओवरराइड करते हुए, मॉड्यूल से MVC सिस्टम के विभिन्न हिस्सों को कॉन्फ़िगर करने का अवसर प्रदान करता है।
ModuleManager , Zend\Mvc\Service\ModuleManagerFactory में व्यक्त किया गया। यह MVC स्टैक में शायद सबसे जटिल कारखाना है। ModuleManager उम्मीद है कि ApplicationConfig सेवा की तैनाती ( Di ) कुंजी module_listener_options और modules साथ की module_listener_options ।
यह Zend\ModuleManager\Listener\DefaultListenerAggregate का उपयोग कर निकाले गए module_listener_options का उपयोग करके module_listener_options । इसके बाद यह देखने के लिए जाँच की जाती है कि क्या ServiceListener नाम की कोई ServiceListener , यदि नहीं, तो यह Zend\Mvc\Service\ServiceListenerFactory नाम के कारखाने का उपयोग करता है। ServiceListener बहुत सी श्रोता सेवाएं जोड़ी जाएंगी, जैसे getServiceConfig के श्रोता, getControllerConfig , getControllerPluginConfig , getViewHelperConfig मॉड्यूल।
ModuleManager तब ModuleManager सेवा को पुनर्प्राप्त करता है और उपरोक्त श्रोताओं को संलग्न करता है। यह सेवा प्रबंधक ऑब्जेक्ट के लिए "ServiceManager" पैरामीटर सेट करके Zend\ModuleManager\ModuleEvent का एक उदाहरण बनाता है। अंत में, वह Zend\ModuleManager\ModuleManager का एक उदाहरण बनाता है और EventManager और ModuleEvent लागू ModuleEvent ।
[मेरा] कोड क्लीयर होने पर मामला:
 <?php namespace Zend\Mvc\Service; use Zend\ModuleManager\Listener\DefaultListenerAggregate; use Zend\ModuleManager\Listener\ListenerOptions; use Zend\ModuleManager\ModuleEvent; use Zend\ModuleManager\ModuleManager; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class ModuleManagerFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { if (!$serviceLocator->has('ServiceListener')) { $serviceLocator->setFactory('ServiceListener', 'Zend\Mvc\Service\ServiceListenerFactory'); } $configuration = $serviceLocator->get('ApplicationConfig'); $listenerOptions = new ListenerOptions($configuration['module_listener_options']); $defaultListeners = new DefaultListenerAggregate($listenerOptions); $serviceListener = $serviceLocator->get('ServiceListener'); $serviceListener->addServiceManager( $serviceLocator, 'service_manager', 'Zend\ModuleManager\Feature\ServiceProviderInterface', 'getServiceConfig' );  
प्लग-इन
स्रोत
नियंत्रक वास्तुकला में एक प्लग-इन सिस्टम शामिल है जो आपको अपना कोड जोड़ने की अनुमति देता है, जिसे तब कहा जाएगा जब नियंत्रक के जीवन के दौरान कुछ घटनाएं घटती हैं। फ्रंट कंट्रोलर एक प्लगइन ब्रोकर का उपयोग उपयोगकर्ता प्लगइन्स की एक रजिस्ट्री के रूप में करता है; प्लगइन ब्रोकर फ्रंट नियंत्रक के माध्यम से पंजीकृत प्रत्येक प्लगइन में ईवेंट विधियों का एक आमंत्रण भी प्रदान करता है।
घटना के तरीकों को सार वर्ग Zend_Controller_Plugin_Abstract में परिभाषित किया गया है, जहां से सभी उपयोगकर्ताओं को Zend_Controller_Plugin_Abstract करना होगा
दृश्य
[मेरे]
- यह ऊपर से नीचे तक पढ़ा जाता है, जब तक कि अन्यथा तीर द्वारा निर्दिष्ट न किया गया हो।
- तीर रेखाएं बताती हैं कि क्या शामिल है।
- तीर के बिना पतली रेखाएं बताती हैं कि क्या जुड़ा हुआ है।
- तीर के बिना मोटी रेखाएं बताती हैं कि नियंत्रण क्या है।
संचार

योजना

लेखक से
चौकस पाठक ने उल्लेख किया कि लेख टोस्टर के लिंक के साथ शुरू होता है, जहां ServiceManager और ModuleManager के बीच अंतर के बारे में एक प्रश्न पूछा जाता है, और लेख का पाठ उनके साथ शुरू होता है। संयोग? मुझे ऐसा नहीं लगता। तथ्य यह है कि हैबर पहला स्थान था, जहां से मैंने ढांचे की मूल बातें से परिचित होना शुरू किया और प्रकाशन ने भ्रम की स्थिति पैदा की, जहां लेख के लेखक द्वारा टिप्पणियों के साथ एक ब्लॉग को प्रलेखन से फिर से बनाया गया था। यह ModuleManager के वर्णन की कमी थी जिसने मुझे गलत तर्क के लिए प्रेरित किया (जो मॉड्यूल ServiceManager में पंजीकृत हैं) और इसके कारण इस लेख का लेखन हुआ।
उपयोगी लिंक
मैं कॉपी पेस्ट में संलग्न नहीं होना चाहता और एक विषय पर 6 भागों को विकसित करना चाहता हूं, इसलिए मैं नोटों के साथ जेडएफ पर अपने बुकमार्क की एक सूची संलग्न कर रहा हूं:
सावधानी बिगाड़ने वाले!ब्लॉग
हैबर के तीन लेखों में
- https://habr.com/post/192522/
- ZendSkeletonApplication पर एक सरल ब्लॉग विकसित करने के लिए प्रलेखन का मुफ्त अनुवाद। यह कॉन्फ़िगर, सेवा प्रबंधक (या मॉड्यूलमैन, मैं अभी भी समझ में नहीं आता है) और तीसरे पक्ष के पुस्तकालयों को जोड़ने के बारे में बात करता है।
मूल ब्लॉग प्रलेखन
EventManager
प्राथमिक समीक्षा
विस्तृत विश्लेषण
ServiceManager
जल्दी शुरू करो
विस्तृत विश्लेषण
ModuleManager
प्रलेखन
 मुझे उम्मीद है कि संक्षिप्त भ्रमण बहुत लंबा नहीं था और उपयोगी था। बेशक, हैबिट नियमों और आपके हिस्से पर रूसी संघ के मौजूदा कानूनों द्वारा अनुमत संपादनों, सुझावों, आलोचनाओं और अन्य कार्यों को स्वीकार किया जाता है।
बोनस जो हम योग्य हैं:
बिल्ली का बच्चा
(= ^ ・ Ω ・ ^ =)