Tur singkat tentang highlights dari Zend Framework

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.


Jalankan bodoh!


Peringatan


  1. 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.
  2. 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] .
  3. 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
    • Tautan yang bermanfaat
  • 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' ); //        $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; } } 

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


komunikasi


Skema


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


(= ^ ・ Ω ・ ^ =)

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


All Articles