Files
yii/docs/guide/id/basics.module.txt
2011-01-16 14:55:27 +00:00

87 lines
5.4 KiB
Plaintext

Modul
=====
> Note|Catatan: Dukungan modul sudah tersedia sejak versi 1.0.3.
Modul adalah unit piranti lunak berdiri sendiri yang terdiri dari [model](/doc/guide/basics.model), [view(tampilan)](/doc/guide/basics.view), [kontroler](/doc/guide/basics.controller) dan komponen pendukung lainnya. Dalam banyak aspek, sebuah modul mirip dengan [aplikasi](/doc/guide/basics.application). Perbedaan utamanya adalah bahwa modul tidak bisa digunakan sendirian dan harus berada di dalam sebuah aplikasi. Pengguna dapat mengakses kontroler dalam sebuah modul layaknya mengakses kontroler aplikasi biasa.
Modul berguna dalam beberapa skenario. Untuk aplikasi berskala-besar, kita dapat membaginya ke dalam beberapa modul, masing-masing dikembangkan dan di-maintain. secara terpisah. Beberapa fitur yang umum digunakan, seperti misalnya manajemen pengguna, manajemen komentar, dapat dikembangkan dalam bentuk modul agar dapat dipakai kembali dengan mudah dalam proyek mendatang.
Membuat Modul
-------------
Modul diatur sebagai direktori yang namanya bertindak sebagai [ID|CWebModule::id] unik. Struktur direktori modul mirip dengan [basis direktori aplikasi](/doc/guide/basics.application#application-base-directory). 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 extension 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 diturunkan dari [CWebModule]. Nama kelas ditentukan menggunakan `ucfirst($id).'Module'`, dengan `$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](/doc/guide/basics.application#application-component) pada tingkat modul.
> Tip: Kita dapat menggunakan generator modul dalam Gii untuk membuat kerangka dasar modul baru.
Menggunakan Modul
-----------------
Untuk menggunakan modul, pertama-tama tempatkan direktori modul di bawah [basis direktori aplikasi](/doc/guide/basics.application#application-base-directory) `modules`. Kemudian deklarasikan ID modul dalam properti [modul|CWebApplication::modules] aplikasi. Sebagai contoh, agar bisa menggunakan modul `forum` di atas, kita dapat menggunakan [konfigurasi aplikasi](/doc/guide/basics.application#application-configuration) berikut:
~~~
[php]
return array(
......
'modules'=>array('forum',...),
......
);
~~~
Modul juga bisa dikonfigurasi dengan nilai properti awal. Pemakaian ini mirip dengan mengkonfigurasi [komponen aplikasi](/doc/guide/basics.application#application-component). Sebagai contoh, modul `forum` dapat memiliki properti bernama `postPerPage` dalam kelas modulnya yang bisa dikonfigurasi dalam [konfigurasi aplikasi](/doc/guide/basics.application#application-configuration) sebagai berikut:
~~~
[php]
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
~~~
Instance modul dapat diakses melalui properti [modul|CController::module] pada kontroler yang aktif saat ini. Melalui instance 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:
~~~
[php]
$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](/doc/guide/basics.controller#route) `moduleID/controllerID/actionID`. Sebagai contoh, dengan mengganggap modul `forum` di atas memiliki kontroler bernama `PostController`, kita dapat menggunakan [rute](/doc/guide/basics.controller#route) `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](/doc/guide/basics.controller#route) di atas. Sebagai contoh, anggap `PostController` di bawah `forum/controllers/admin`, kita dapat merujuk pada aksi `create` menggunakan `forum/admin/post/create`.
Modul Nested(Bersarang)
--------------
Modul dapat bersarang(nested). Yaitu, sebuah modul bisa berisi modul lainnya. Kita menyebut modul yang menampung sebagai *induk modul* sementara yang ditampung dipanggil disebut *anak modul*. Anak modul harus ditempatkan di bawah direktori `modules` pada modul induknya.
Untuk mengakses aksi kontroler dalam anak modul, kita harus menggunakan rute `parentModuleID/childModuleID/controllerID/actionID`.
<div class="revision">$Id: basics.module.txt 2363 2010-08-29 02:35:15Z qiang.xue $</div>