Catatan: Dukungan modul sudah tersedia sejak versi 1.0.3.
Modul adalah unit piranti lunak berdiri sendiri yang terdiri dari model, tampilan, kontroler dan komponen pendukung lainnya. Dalam banyak aspek, sebuah modul mirip dengan aplikasi. Perbedaan utamanya adalah bahwa modul tidak bisa disebarkan sendirian dan ia harus berada di dalam sebuah aplikasi. Para pengguna dapat mengakses kontroler dalam sebuah modul layaknya yang dilakukan dengan kontroler aplikasi biasa.
Modul berguna dalam beberapa skenario. Untuk aplikasi berskala-besar, kita dapat membaginya ke dalam beberapa modul, masing-masing dikembangkan dan dipelihara secara terpisah. Beberapa fitur yang umum digunakan, seperti misalnya manajemen pengguna, manajemen komentar, dapat dikembangkan dalam batasan modul agar dapat dipakai kembali dengan mudah dalam proyek mendatang.
Modul diatur sebagai direktori di mana namanya bertindak sebagai ID unik. Struktur direktori modul mirip dengan basis direktori aplikasi. Contoh berikut memperlihatkan struktur umum direktori pada modul bernama forum
:
forum/ ForumModule.php file kelas modul components/ berisi komponen yang bisa dipakai ulang views/ berisi file tampilan untuk widgets controllers/ berisi file kelas kontroler DefaultController.php file kelas kontroler standar extensions/ berisi ekstensi pihak-ketiga models/ berisi file kelas model views/ berisi file tampilan kontroler dan tatat letak layouts/ berisi file tampilan tata letak default/ berisi file tampilan untuk DefaultController index.php file tampilan indeks
Modul harus memiliki kelas modul yang diperluas dari CWebModule. Nama kelas ditentukan menggunakan ucfirst($id).'Module'
, di mana $id
merujuk pada ID modul (atau nama direktori modul). Kelas modul bertindak sebagai pusat tempat penyimpanan informasi berbagi diantara kode modul. Sebagai contoh, kita dapat menggunakan CWebModule::params untuk menyimpan parameter modul, dan menggunakan CWebModule::components untuk berbagi komponen aplikasi pada tingkat modul.
Tip: Kita bisa menggunakan piranti
yiic
untuk membuat kerangka dasar modul baru. Sebagai contoh, untuk membuat modulforum
di atas, kita dapat menjalankan perintah berikut dalam jendela baris perintah:% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Silahkan ketik 'help' untuk bantuan. Ketik 'exit' untuk keluar. >> module forum
Untuk menggunakan modul, pertama tempatkan direktori modul di bawah basis direktori aplikasi modules
. Kemudian deklarasikan ID modul dalam properti modul aplikasi. Sebagai contoh, agar bisa menggunakan modul forum
di atas, kita dapat menggunakan konfigurasi aplikasi berikut:
return array(
......
'modules'=>array('forum',...),
......
);
Modul juga bisa dikonfigurasi dengan nilai properti awal. Pemakaian ini mirip dengan mengkonfigurasi komponen aplikasi. Sebagai contoh, modul forum
dapat memiliki properti bernama postPerPage
dakan kelas modulnya yang bisa dikonfigurasi dalam konfigurasi aplikasi sebagai berikut:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
Turunan modul dapat diakses melalui properti modul pada kontroler yang aktif saat ini. Melalui turunan modul, selanjutnya kita dapat mengakses informasi yang dibagi pada tingkat modul. Sebagai contoh, agar bisa mengakses informasi postPerPage
di atas, kita dapat menggunakan ekspresi berikut:
$postPerPage=Yii::app()->controller->module->postPerPage;
// atau yang berikut jika $this merujuk pada turunan kontroler
// $postPerPage=$this->module->postPerPage;
Aksi kontroler dalam sebuah modul dapat diakses menggunakan rute moduleID/controllerID/actionID
. Sebagai contoh, menganggap modul forum
di atas memiliki kontroler bernama PostController
, kita dapat menggunakan rute forum/post/create
untuk merujuk pada aksi create
dalam kontroler ini. URL terkait untuk rute ini adalah http://www.example.com/index.php?r=forum/post/create
.
Tip: Jika kontroler ada dalam sub-direktori
controllers
, kita masih dapat menggunakan format rute di atas. Sebagai contoh, menganggapPostController
di bawahforum/controllers/admin
, kita dapat merujuk pada aksicreate
menggunakanforum/admin/post/create
.
Modul dapat diulang. Yaitu, sebuah modul bisa berisi modul lainnya. Kita menyebut pemanggil sebagai leluhur modul sementara yang dipanggil disebut anak modul. Anak modul harus ditempatkan di bawah direktori modules
pada modul leluhurnya. Untuk mengakses aksi kontroler dalam anak modul, kita harus menggunakan rute parentModuleID/childModuleID/controllerID/actionID
.
Signup or Login in order to comment.