جولة موجزة من أبرز معالم إطار عمل Zend

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


هنا لن تجد الإجابة على هذا السؤال ، ولكنك ستتعرف على ServiceManager و ModuleManager.


تشغيل الحمقى!


تحذير


  1. تستند هذه المادة إلى ما كنت أبحث عنه في Zend Framework 2 ، وفي بعض الأماكن تظهر حتى الإشارات من الإصدار 1.. *. لا أعتقد أن هذا سيصبح مشكلة عند المقارنة بإصدارات أخرى ، حيث يتم النظر في النقاط الأساسية ومن غير المرجح أن تتغير على مستوى العالم.
  2. في الاستدلال والترجمات (وكذلك في الفقرة 1) قد تكون هناك أخطاء فادحة ، سواء الألغام والمصادر الأصلية. سيتم تزويد جميع الروابط ، وسيكون عملك الخاص مع ملاحظة [الأعمال المتعلقة بالألغام] .
  3. إنه يستهدف أولئك الذين يتسببون في إرباك جوجل مثلي. لن يكون هناك نشر للمدونات والتفسيرات والتفاعل. ولكن سيكون هناك صورتان وقطعة.

المحتويات


  • الشروط
  • إطار عمل الجهاز
    • الهيكل العام والعلاقات
    • الإضافات
  • التصور
    • الاتصالات
    • رسم تخطيطي
  • من المؤلف
    • روابط مفيدة
  • مكافأة

الشروط


المصدر قليلا [الألغام] .


  • التطبيق - المنتج النهائي ، الموقع ؛
  • الوحدة النمطية هي "كتلة" مكتملة وظيفياً لتطبيق ما ، ويمكن أن يتكون رمزها من نماذج وتمثيلات ووحدات تحكم. تعمل الوحدة النمطية على توسيع وظائف تطبيق الويب ويمكن أن تعمل "داخله" فقط ؛ الوحدات مسجلة في 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' ); //        $events = $serviceLocator->get('EventManager'); $events->attach($defaultListeners); $events->attach($serviceListener); $moduleEvent = new ModuleEvent; $moduleEvent->setParam('ServiceManager', $serviceLocator); $moduleManager = new ModuleManager($configuration['modules'], $events); $moduleManager->setEvent($moduleEvent); return $moduleManager; } } 

الإضافات


المصدر


تتضمن بنية وحدة التحكم نظامًا إضافيًا يسمح لك بإضافة رمزك الخاص ، والذي سيتم استدعاؤه عند وقوع أحداث معينة أثناء حياة وحدة التحكم. تستخدم وحدة التحكم الأمامية وسيط المكوّن الإضافي كسجل لمكونات المستخدم الإضافية ؛ كما يوفر وسيط المكونات الإضافية استدعاء لطرق الحدث في كل مكون إضافي مسجل من خلال وحدة التحكم الأمامية.


يتم تعريف أساليب الأحداث في فئة الملخص Zend_Controller_Plugin_Abstract abstract ، والتي يجب أن Zend_Controller_Plugin_Abstract جميع مكونات المستخدم الإضافية


التصور


[خاصتي]


  • تتم قراءته من أعلى إلى أسفل ، ما لم يتم تحديد خلاف ذلك بواسطة الأسهم.
  • تشير خطوط الأسهم إلى ما تم تضمينه.
  • تشير الخطوط الرفيعة بدون السهام إلى ما هو متصل.
  • تشير الخطوط السميكة التي لا تحتوي على أسهم إلى عناصر التحكم.

الاتصالات


التواصل


مخطط


مخطط


من المؤلف


لاحظ القارئ اليقظ أن المقالة تبدأ برابط إلى محمصة ، حيث يتم طرح سؤال حول الاختلافات بين ServiceManager و ModuleManager ، ويبدأ نص المقالة معهم. صدفة؟ لا أعتقد ذلك. والحقيقة هي أن هبر كان أول مكان بدأت منه التعرف على أساسيات إطار العمل وأدخل المنشور ارتباكًا ، حيث تم إعادة إنشاء مدونة من الوثائق مع تعليقات من قبل كاتب المقالة. كان عدم وجود وصف ل ModuleManager هو الذي دفعني إلى التفكير الخاطئ (أن الوحدات مسجلة في ServiceManager) وهذا أدى إلى كتابة هذه المقالة.


روابط مفيدة


لا أريد المشاركة في لصق النسخ وزرع 6 أجزاء حول موضوع واحد ، لذلك أرفق قائمة من إشاراتي المرجعية على ZF مع الملاحظات:


تحذير المفسد!

المدونة


في ثلاث مقالات من هبر


  • https://habr.com/post/192522/
  • ترجمة مجانية للوثائق لتطوير مدونة بسيطة على ZendSkeletonApplication. يتحدث عن التكوينات ، ServiceManager (أو ModuleManager ، ما زلت لا أفهم) وتوصيل مكتبات الطرف الثالث.

توثيق المدونة الأصلي



مدير الأحداث


مراجعة أولية



تحليل مفصل



مدير الخدمة


بداية سريعة



تحليل مفصل



Modulemanager


التوثيق



آمل أن الرحلة القصيرة لم تكن طويلة جدًا وكانت مفيدة. بالطبع ، يتم قبول التعديلات والاقتراحات والنقد والإجراءات الأخرى التي تسمح بها قواعد هبر والقوانين الحالية للاتحاد الروسي من جانبك.




المكافأة التي نستحقها:


كيتي


(= ^ ・ Ω ・ ^ =)

Source: https://habr.com/ru/post/ar426303/


All Articles