Module & Module Manager Di Zend Framework 2
Module Manager di Zend Framework 2 adalah cara yang ampuh untuk membuat kode program yang re-usable yang dapat digunakan kembali di project yang lain dengan mudah.
Di Zend Framework 2, Module adalah sebuah group dari kode program yang biasanya ditujukan untuk menghandle bagian tertentu dari sebuah aplikasi. Module ini bisa berisi Service, Konfigurasi, Controller dan View Script. Karena Module ini bisa berisi konfigurasi, maka Module juga bisa digunakan untuk membuat Route, memuat Service ke dalam Service Manager dan memasang Listener untuk sebuah Event.
Module Manager
Module Manager adalah salah satu komponen yang sangat penting dalam Zend Framework 2 yang berfungsi untuk memuat Module yang sudah didaftarkan, dan men-trigger event - event yang ada di dalam Module . Seringnya developer tidak menggunakan Module Manager ini secara langsung. Untuk itu di sini saya membahas bagaimana sebenarnya sebuah Module bisa dimuat pada Zend Framework 2.
Zend\ModuleManager\ModuleManager adalah implementasi dari Zend\ModuleManager\Interface yang bertanggung jawab untuk memuat module dan membuat Namespace dari Module tersebut bisa digunakan di dalam aplikasi. Module Manager menggunakan array sebagai konfigurasi, yang kemudian dijadikan parameter untuk Constructor. Konfigurasi bisa berisi daftar Module yang akan dimuat, lokasi dari Module, dan lokasi dari konfigurasi file Autoload.
$moduleManager = new ModuleManager([ 'modules' => [ 'Application', 'Blog', 'Catalog', 'Cart', 'Checkout', ], 'module_listener_options' => [ 'module_paths' => [ 'config/autoload/{,*.}{global,local}.php', ]
] ]); $moduleManager->loadModules();
Atau biasanya dibuat sebagai konfigurasi di file config/application.config.php yang akan dimasukkan ke dalam Module Manager sewaktu instansiasi.
Class Module.php
Syarat minimal dari sebuah Module di Zend Framework 2 adalah harus memiliki sebuah file yang diberi nama Module.php. Module.php ini adalah Class yang sangat simpel yang hanya cukup diberi nama Module yang diletakkan di dalam Namespace Module tersebut. Di dalamnya kita bisa membuat array yang mendefenisikan konfigurasi dari module (method getConfig()) dan lokasi dari Class yang digunakan sebagai Autoloaded pada Module ini (method getAutoloaderConfig()).
Dan ketika module dimuat maka yang pertama kali dipanggil adalah method onBootstrap(). Ini merupakan method yang cukup ampuh dan kita bisa menggunakannya untuk memasang Listener dari Event. Ataupun mendefenisikan Routing yang baru dan menambahkan kode yang akan diproses pada setiap request.
Sedangkan method init() dipanggil sebelum Module di-bootstrap, dan bisa digunakan untuk membuat konfigurasi yang dibutuhkan Module tersebut sewaktu proses Bootstrap.
<?php namespace Order;
class Module { }
Zend Framework 2 menyediakan beberapa Interface yang bisa digunakan oleh Class Module yang di dalamnya tersedia fitur - fitur yang bisa digunakan oleh Module tersebut. Interface tersebut mendeskripsikan method - method yang diimplementasikan, walaupun begitu Interface tersebut tidak perlu sepenuhnya diimplementasikan (cukup menuliskan nama Method saja).
Penggabungan Konfigurasi
Konfigurasi dapat diletakkan di beberapa tempat, namun semua konfigurasi itu digabunggakn secara rekursif ke dalam sebuah konfigurasi oleh Zend\Stdlib\ArrayUtils::merge(). Karena konfigurasi digabungkan secara rekursif, urutan penggabungan konfigurasi tersebut harus dipahami untuk menghindari overwriting yang tidak diinginkan.
Konfigurasi digabungkan dengan urutan berikut ini.
Array yang dikembalikan oleh method getConfig() yang ada pada Class Module
config/autoload/global.*.php File Autoload Global
config/autoload/local.*.php File Autoload Lokal
Method - method yang dideskripsikan di dalam Interface yang sudah disediakan get*Config()
Ketika point A - C selesai, maka konfigurasi gabungan yang belum sempurna ini dapat di-cache oleh Module Manager. Jadi, jika ingin menggunakan konfigurasi menggunakan Closure, seharusnya diletakkan di method - method (point D) konfigurasi kustom, bukan di method getConfig() (point A).
Event di Dalam Module
Agar membuat Module se-fleksibel mungkin, ModuleManager men-trigger sejumlah Event selama proses memuat Module. Pada awalnya, event loadModules di-trigger, kemudian event - event lainnya. Sejumlah event tersebut di-trigger setiap Module dimuat. Adapun urutan dari event - event tersebut
loadModules (ModuleEvent::EVENT_LOAD_MODULES)
loadModule.resolve (ModuleEvent::EVENT_LOAD_MODULE_RESOLVE)
loadModule (ModuleEvent::EVENT_LOAD_MODULE)
mergeConfig (ModuleEvent::EVENT_MERGE_CONFIG)
loadModules.post (ModuleEvent::EVENT_LOAD_MODULES_POST)
Untuk lebih detail dari tujuan event - event tersebut di atas, bisa melihat dokumentasi Zend Framework di sini
Referensi:
Zend Framework 2 Certification Study Guide
Learn Zend Framework 2 By Example












