Apakah ini hanya sebuah kerangka kerja, atau apakah kerangka kerja ini mewujudkan kebanggaan komunitas PHP - pengembangnya yang pekerja keras, bisa dikatakan, bahan utama? Dengan sebaran konfigurasi ... Subjek cinta PL kami, yang memiliki MVC yang baik, sehingga Zend Framework adalah kerangka PHP terbaik.
Di sini Anda tidak akan menemukan jawaban untuk pertanyaan ini, tetapi Anda akan belajar tentang ServiceManager dan ModuleManager.

Peringatan
- Materi ini didasarkan pada apa yang saya cari di Zend Framework 2, di beberapa tempat bahkan menyebutkan versi 1. muncul. *. Saya tidak berpikir bahwa ini akan menjadi masalah ketika membandingkan dengan versi lain, karena poin mendasar dipertimbangkan dan mereka tidak mungkin berubah secara global.
- Dalam penalaran dan terjemahan (serta dalam paragraf 1) mungkin ada kesalahan besar, baik sumber saya maupun sumber aslinya. Semua akan diberi tautan, dan karya Anda sendiri akan dengan catatan [milikku] .
- Ini ditujukan untuk mereka yang google dan, seperti saya, menjadi bingung. Tidak akan ada penyebaran blog, penjelasan dan interaktivitas. Tapi akan ada dua gambar dan seekor kucing.
Isi
- Ketentuan
- Kerangka kerja perangkat
- Struktur dan hubungan umum
- Plugin
- Visualisasi
- Komunikasi
- Diagram skematik
- Dari penulis
- Bonus
Ketentuan
Sumber , sedikit [milikku] .
- Aplikasi - produk akhir, situs;
- Modul adalah "blok" aplikasi yang diselesaikan secara fungsional, kode yang dapat terdiri dari model, representasi, pengontrol. Modul ini memperluas fungsionalitas aplikasi web dan hanya dapat berfungsi "di dalamnya"; Modul terdaftar di
application.config.php
di bagian modules
- ModuleManager - wadah untuk memanipulasi modul;
- Layanan - "mekanisme" dalam modul, untuk manipulasi antara model, pengontrol, jenis, dll. Layanan terdaftar di
module.config.php
di bagian service_manager
. - ServiceManager - wadah untuk memanipulasi layanan.
- ControllerManager - bekerja dengan layanan dan pabrik untuk memuat pengontrol (
\Zend\ServiceManager\AbstractFactoryInterface
atau \Zend\ServiceManager\ServiceManager
). berlabuh - EventManager - komponen yang mengumpulkan penangan kejadian (Listener) untuk satu atau lebih peristiwa yang bernama (Peristiwa), dan juga memulai pemrosesan peristiwa ini.
- Plugin adalah kelas yang memperluas fungsionalitas semua pengontrol dengan beberapa cara.
Kerangka kerja perangkat
Struktur dan hubungan umum
Sumber
Ketika Zend\Mvc\Application
, objek Zend\ServiceManager\ServiceManager
dibuat dan dikonfigurasi melalui Zend\Mvc\Service\ServiceManagerConfig
. ServiceManagerConfig
mendapatkan konfigurasi dari config/application.config.php
(atau konfigurasi aplikasi lain yang diteruskan ke Application
saat dibuat). Dari semua layanan dan pabrik yang diwakili dalam namespace Zend\Mvc\Service
, ServiceManagerConfig
hanya bertanggung jawab untuk tiga: SharedEventManager
, EventManager
dan ModuleManager
.
Setelah itu, Application
mengambil ModuleManager
. Pada titik ini, ModuleManager
melalui ServiceManager
mengkonfigurasi layanan dan pabrik yang disediakan di Zend\Mvc\Service\ServiceListenerFactory
. Pendekatan ini memungkinkan kami untuk menyederhanakan konfigurasi aplikasi utama dan memberi pengembang kesempatan untuk mengonfigurasi berbagai bagian sistem MVC dari modul, mengesampingkan konfigurasi default apa pun dalam layanan MVC ini.
ModuleManager
, dinyatakan dalam Zend\Mvc\Service\ModuleManagerFactory
. Ini mungkin pabrik paling kompleks di tumpukan MVC. ModuleManager
mengharapkan layanan ApplicationConfig
untuk digunakan ( Di ) dengan kunci module_listener_options
dan modules
.
Itu menciptakan sebuah instance dari Zend\ModuleManager\Listener\DefaultListenerAggregate
menggunakan module_listener_options
diekstraksi. Itu kemudian memeriksa untuk melihat apakah ada layanan bernama ServiceListener
, jika tidak, ia menggunakan pabrik bernama Zend\Mvc\Service\ServiceListenerFactory
. Banyak layanan pendengar akan ditambahkan ke ServiceListener
, seperti pendengar getServiceConfig
, getControllerConfig
, getControllerPluginConfig
, modul getViewHelperConfig
.
ModuleManager
kemudian mengambil layanan ModuleManager
dan melampirkan pendengar di atas. Itu menciptakan turunan dari Zend\ModuleManager\ModuleEvent
dengan mengatur parameter "ServiceManager" ke objek manajer layanan. Akhirnya, ia membuat turunan dari Zend\ModuleManager\ModuleManager
dan mengimplementasikan EventManager
dan ModuleEvent
.
[milikku] Kasus ketika kode lebih jelas:
<?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' );
Plugin
Sumber
Arsitektur controller termasuk sistem plug-in yang memungkinkan Anda untuk menambahkan kode Anda sendiri, yang akan dipanggil ketika peristiwa tertentu terjadi selama masa controller. Pengontrol depan menggunakan broker plugin sebagai registri plugin pengguna, broker plugin juga menyediakan doa metode acara di setiap plugin yang terdaftar melalui front controller.
Metode acara didefinisikan dalam kelas abstrak Zend_Controller_Plugin_Abstract
, dari mana semua plugin pengguna harus mewarisi
Visualisasi
[milikku]
- Itu dibaca dari atas ke bawah, kecuali ditentukan oleh panah.
- Garis panah menunjukkan apa yang disertakan.
- Garis-garis tipis tanpa panah menunjukkan apa yang terhubung.
- Garis tebal tanpa panah menunjukkan kontrol apa.
Komunikasi

Skema

Dari penulis
Pembaca yang penuh perhatian mencatat bahwa artikel dimulai dengan tautan ke Toaster, di mana pertanyaan diajukan tentang perbedaan antara ServiceManager dan ModuleManager, dan teks artikel dimulai dengan mereka. Kebetulan? Saya kira tidak. Faktanya adalah bahwa Habr adalah tempat pertama dari mana saya mulai berkenalan dengan dasar-dasar kerangka kerja dan publikasi tersebut menimbulkan kebingungan, di mana sebuah blog diciptakan kembali dari dokumentasi dengan komentar dari penulis artikel. Kurangnya deskripsi ModuleManager yang mendorong saya ke alasan yang salah (bahwa modul terdaftar di ServiceManager) dan ini menyebabkan penulisan artikel ini.
Tautan yang bermanfaat
Saya tidak ingin terlibat dalam copy paste dan menumbuhkan 6 bagian pada satu topik, jadi saya melampirkan daftar bookmark saya di ZF dengan catatan:
Perhatian spoiler!Blog
Dalam tiga artikel dari Habr
- https://habr.com/post/192522/
- Terjemahan gratis dokumentasi untuk mengembangkan blog sederhana di ZendSkeletonApplication. Ini berbicara tentang konfigurasi, ServiceManager (atau ModuleManager, saya masih tidak mengerti) dan menghubungkan perpustakaan pihak ketiga.
Dokumentasi Blog Asli
Manajer acara
Ulasan utama
Analisis terperinci
Servicemanager
Mulai cepat
Analisis terperinci
Modulemanager
Dokumentasi
Saya harap kunjungan singkat ini tidak terlalu lama dan bermanfaat. Tentu saja, suntingan, saran, kritik, dan tindakan lain yang diizinkan oleh aturan Habr dan undang-undang Federasi Rusia saat ini di pihak Anda diterima.
Bonus yang pantas kami dapatkan:
Kitty
(= ^ ・ Ω ・ ^ =)