هل هو مجرد إطار عمل ، أم أن هذا الإطار يجسد فخر مجتمع PHP - المطورين المجتهدين ، إذا جاز التعبير ، مكون رئيسي؟ مع تناثر التكوينات ... موضوع حب PL لدينا ، والذي يحتوي على MVC جيد ، لذا فإن Zend Framework هو أفضل إطار PHP.
هنا لن تجد الإجابة على هذا السؤال ، ولكنك ستتعرف على ServiceManager و ModuleManager.

تحذير
- تستند هذه المادة إلى ما كنت أبحث عنه في Zend Framework 2 ، وفي بعض الأماكن تظهر حتى الإشارات من الإصدار 1.. *. لا أعتقد أن هذا سيصبح مشكلة عند المقارنة بإصدارات أخرى ، حيث يتم النظر في النقاط الأساسية ومن غير المرجح أن تتغير على مستوى العالم.
- في الاستدلال والترجمات (وكذلك في الفقرة 1) قد تكون هناك أخطاء فادحة ، سواء الألغام والمصادر الأصلية. سيتم تزويد جميع الروابط ، وسيكون عملك الخاص مع ملاحظة [الأعمال المتعلقة بالألغام] .
- إنه يستهدف أولئك الذين يتسببون في إرباك جوجل مثلي. لن يكون هناك نشر للمدونات والتفسيرات والتفاعل. ولكن سيكون هناك صورتان وقطعة.
المحتويات
- الشروط
- إطار عمل الجهاز
- الهيكل العام والعلاقات
- الإضافات
- التصور
- من المؤلف
- مكافأة
الشروط
المصدر قليلا [الألغام] .
- التطبيق - المنتج النهائي ، الموقع ؛
- الوحدة النمطية هي "كتلة" مكتملة وظيفياً لتطبيق ما ، ويمكن أن يتكون رمزها من نماذج وتمثيلات ووحدات تحكم. تعمل الوحدة النمطية على توسيع وظائف تطبيق الويب ويمكن أن تعمل "داخله" فقط ؛ الوحدات مسجلة في
application.config.php
في قسم modules
- ModuleManager - حاوية لمعالجة الوحدات ؛
- الخدمة - "آلية" في الوحدة ، للتلاعب بين النماذج ، وحدات التحكم ، الأنواع ، إلخ. يتم تسجيل الخدمات في
module.config.php
في قسم service_manager
. - ServiceManager - حاوية لمعالجة الخدمات.
- ControllerManager - يعمل مع الخدمات والمصانع لتحميل وحدات التحكم (
\Zend\ServiceManager\AbstractFactoryInterface
أو \Zend\ServiceManager\ServiceManager
). قفص الاتهام - EventManager - مكون يقوم بتجميع معالجات الأحداث (المستمع) لواحد أو أكثر من الأحداث المسماة (Event) ، ويبدأ أيضًا في معالجة هذه الأحداث.
- المكوّن الإضافي عبارة عن فئة توسع وظائف جميع وحدات التحكم بطريقة ما.
إطار عمل الجهاز
الهيكل العام والعلاقات
المصدر
عند إنشاء Zend\Mvc\Application
كائن Zend\ServiceManager\ServiceManager
وتكوينه من خلال Zend\Mvc\Service\ServiceManagerConfig
. تحصل ServiceManagerConfig
على التكوين من config/application.config.php
(أو بعض تكوينات config/application.config.php
الأخرى التي يتم تمريرها إلى Application
عند إنشائه). من بين جميع الخدمات والمصانع الممثلة في مساحة الاسم Zend\Mvc\Service
، تعتبر ServiceManagerConfig
مسؤولة عن ثلاثة فقط: SharedEventManager
و EventManager
و ModuleManager
.
بعد ذلك ، يسترد Application
ModuleManager
. عند هذه النقطة ، يقوم ModuleManager
خلال ServiceManager
بتكوين الخدمات والمصانع المتوفرة في Zend\Mvc\Service\ServiceListenerFactory
. يتيح لنا هذا النهج تبسيط تكوين التطبيق الرئيسي وتزويد المطور بفرصة لتكوين أجزاء مختلفة من نظام MVC من الوحدات النمطية ، متجاوزًا أي تكوين افتراضي في خدمات هذه MVCs.
ModuleManager
معبراً عنه في Zend\Mvc\Service\ModuleManagerFactory
. ربما يكون هذا هو المصنع الأكثر تعقيدًا في مكدس MVC. يتوقع ModuleManager
أن يتم نشر خدمة ApplicationConfig
( Di ) باستخدام المفاتيح module_listener_options
modules
.
يقوم بإنشاء مثيل من Zend\ModuleManager\Listener\DefaultListenerAggregate
باستخدام module_listener_options
المستخرجة. ثم يتحقق للتحقق من وجود خدمة باسم ServiceListener
؛ وإذا لم يكن كذلك ، فإنه يستخدم مصنعًا باسم Zend\Mvc\Service\ServiceListenerFactory
. ستتم إضافة الكثير من خدمات المستمع إلى ServiceListener
، مثل مستمعي getServiceConfig
و getControllerConfig
و getControllerPluginConfig
و getViewHelperConfig
module.
ModuleManager
بعد ذلك باسترداد خدمة ModuleManager
المستمعين أعلاه. يقوم بإنشاء مثيل Zend\ModuleManager\ModuleEvent
عن طريق تعيين المعلمة "ServiceManager" إلى كائن إدارة الخدمة. وأخيرًا ، يقوم بإنشاء مثيل من Zend\ModuleManager\ModuleManager
ويقوم بتنفيذ EventManager
و 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
abstract ، والتي يجب أن Zend_Controller_Plugin_Abstract
جميع مكونات المستخدم الإضافية
التصور
[خاصتي]
- تتم قراءته من أعلى إلى أسفل ، ما لم يتم تحديد خلاف ذلك بواسطة الأسهم.
- تشير خطوط الأسهم إلى ما تم تضمينه.
- تشير الخطوط الرفيعة بدون السهام إلى ما هو متصل.
- تشير الخطوط السميكة التي لا تحتوي على أسهم إلى عناصر التحكم.
الاتصالات

مخطط

من المؤلف
لاحظ القارئ اليقظ أن المقالة تبدأ برابط إلى محمصة ، حيث يتم طرح سؤال حول الاختلافات بين ServiceManager و ModuleManager ، ويبدأ نص المقالة معهم. صدفة؟ لا أعتقد ذلك. والحقيقة هي أن هبر كان أول مكان بدأت منه التعرف على أساسيات إطار العمل وأدخل المنشور ارتباكًا ، حيث تم إعادة إنشاء مدونة من الوثائق مع تعليقات من قبل كاتب المقالة. كان عدم وجود وصف ل ModuleManager هو الذي دفعني إلى التفكير الخاطئ (أن الوحدات مسجلة في ServiceManager) وهذا أدى إلى كتابة هذه المقالة.
روابط مفيدة
لا أريد المشاركة في لصق النسخ وزرع 6 أجزاء حول موضوع واحد ، لذلك أرفق قائمة من إشاراتي المرجعية على ZF مع الملاحظات:
تحذير المفسد!المدونة
في ثلاث مقالات من هبر
- https://habr.com/post/192522/
- ترجمة مجانية للوثائق لتطوير مدونة بسيطة على ZendSkeletonApplication. يتحدث عن التكوينات ، ServiceManager (أو ModuleManager ، ما زلت لا أفهم) وتوصيل مكتبات الطرف الثالث.
توثيق المدونة الأصلي
مدير الأحداث
مراجعة أولية
تحليل مفصل
مدير الخدمة
بداية سريعة
تحليل مفصل
Modulemanager
التوثيق
آمل أن الرحلة القصيرة لم تكن طويلة جدًا وكانت مفيدة. بالطبع ، يتم قبول التعديلات والاقتراحات والنقد والإجراءات الأخرى التي تسمح بها قواعد هبر والقوانين الحالية للاتحاد الروسي من جانبك.
المكافأة التي نستحقها:
كيتي
(= ^ ・ Ω ・ ^ =)