mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-04 07:14:06 +01:00
87 lines
5.4 KiB
Plaintext
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> |