mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-04 07:14:06 +01:00
169 lines
6.2 KiB
Plaintext
169 lines
6.2 KiB
Plaintext
Komponen
|
|
========
|
|
|
|
Aplikasi Yii dibangun setelah komponen berupa obyek ditulis menjadi
|
|
spesifikasi. Sebuah komponen adalah turunan dari
|
|
[CComponent] atau kelas sebelumnya. Pemakaian komponen meliputi
|
|
pengaksesan propertinya dan memunculkan/menangani event-nya. Kelas basis
|
|
[CComponent] menetapkan bagaimana untuk mendefinisikan properti dan event.
|
|
|
|
Properti Komponen
|
|
-----------------
|
|
|
|
Properti komponen seperti variabel anggota public sebuah obyek. Kita dapat
|
|
membaca nilainya atau menempatkan sebuah nilai ke dalamnya. Sebagai contoh,
|
|
|
|
~~~
|
|
[php]
|
|
$width=$component->textWidth; // ambil properti textWidth
|
|
$component->enableCaching=true; // setel properti enableCaching
|
|
~~~
|
|
|
|
Untuk mendefinisikan properti komponen, kita cuku mendeklarasian variabel
|
|
anggota public dalam kelas komponen. Cara yang lebih fleksibel adalah dengan
|
|
mendefinisikan metode getter (pengambil) dan setter (penyetel) seperti berikut:
|
|
|
|
~~~
|
|
[php]
|
|
public function getTextWidth()
|
|
{
|
|
return $this->_textWidth;
|
|
}
|
|
|
|
public function setTextWidth($value)
|
|
{
|
|
$this->_textWidth=$value;
|
|
}
|
|
~~~
|
|
|
|
Kode di atas mendefinisikan properti yang bisa ditulis dengan nama `textWidth` (nama
|
|
sensitif jenis huruf). Ketika membaca properti, `getTextWidth()` dipanggil
|
|
dan nilai yang dihasilkannya menjadi nilai properti; Hal yang mirip, saat menulis
|
|
properti, `setTextWidth()` dipanggil. Jika metode penyetel tidak didefinisikan,
|
|
properti akan menjadi hanya-baca dan menulisinya akan memunculkan sebuah
|
|
eksepsi. Menggunakan metode pengambil dan penyetel untuk mendefinisikan sebuah
|
|
properti memiliki keuntungan bahwa logika tambahan (seperti melakukan validasi, memunculkan event)
|
|
dapat dijalankan saat membaca dan menulis properti.
|
|
|
|
>Note|Catatan: Ada perbedaan menyolok antara properti yang didefinisikan via metode
|
|
pengambil/penyetel dan variabel anggota kelas. Nama pengambil/penyetel
|
|
tidak sensitif jenis huruf sementara variabel anggota kelas sensitif jenis huruf.
|
|
|
|
Event Komponen
|
|
--------------
|
|
|
|
Event komponen adalah properti khusus yang mengambil metode (disebut `pengendali event`)
|
|
sebagai nilainya. Melampirkan (menempatkan) metode ke sebuah event akan
|
|
menyebabkan metode dipanggil secara otomatis di tempat di mana event
|
|
dimunculkan. Oleh karena itu, perilaku komponen bisa diubah dengan cara yang
|
|
tidak bisa dilihat selama pengembangan komponen.
|
|
|
|
Event komponen didefinisikan dengan mendefinisikan sebuah metode yang namanya dimulai
|
|
dengan `on`. Seperti nama properti yang didefinisikan via metode pengambil/penyetel, nama event tidak
|
|
sensitif jenis huruf. Kode berikut mendefinisikan sebuah event `onClicked`:
|
|
|
|
~~~
|
|
[php]
|
|
public function onClicked($event)
|
|
{
|
|
$this->raiseEvent('onClicked', $event);
|
|
}
|
|
~~~
|
|
|
|
di mana `$event` adalah turunan [CEvent] atau anak kelasnya yang menyediakan
|
|
parameter event.
|
|
|
|
Kita dapat melampirkan sebuah metode ke event ini seperti berikut:
|
|
|
|
~~~
|
|
[php]
|
|
$component->onClicked=$callback;
|
|
~~~
|
|
|
|
di mana `$callback` merujuk ke PHP callback yang benar. Ia bisa berupa fungsi
|
|
global atau metode kelas. Jika metode kelas, callback harus dibentuk sebagai
|
|
array: `array($object,'methodName')`.
|
|
|
|
Tanda tangan pengenali event harus seperti berikut:
|
|
|
|
~~~
|
|
[php]
|
|
function methodName($event)
|
|
{
|
|
......
|
|
}
|
|
~~~
|
|
|
|
di mana `$event` merupakan parameter yang menjelaskan event (ia berasal dari
|
|
panggilan `raiseEvent()`). Parameter `$event` adalah turunan dari [CEvent] atau
|
|
kelas sebelumnya. Pada kondisi minimum, ia berisi informasi mengenai siapa
|
|
yang memunculkan event.
|
|
|
|
Jika kita memanggil `onClicked()` sekarang, event `onClicked` akan dimunculkan (di dalam
|
|
`onClicked()`), dan pengendali event terlampir akan dipanggil secara
|
|
otomatis.
|
|
|
|
Sebuah event dapat dilampirkan ke multipel pengendali. Saat event dimunculkan,
|
|
pengendali akan dipanggil dengan urutan di mana ia dilampirkan ke event.
|
|
Jika sebuah pengendali memutuskan untuk menghindari pemanggilan pengendali berikutnya,
|
|
bisa dilakukan dengan menyetel [$event->handled|CEvent::handled] menjadi true.
|
|
|
|
|
|
Perilaku Komponen
|
|
-----------------
|
|
|
|
Mulai dari versi 1.0.2, sebuah komponen sudah ditambahkan guna mendukung [mixin](http://en.wikipedia.org/wiki/Mixin)
|
|
dan dapat dilampirkan dengan satu atau beberapa perilaku. Sebuah *perilaku* adalah obyek
|
|
yang metodenya bisa 'inherited' (diturunkan) dengan komponen lampirannya dalam arti pengumpulan
|
|
fungsionalitas daripada spesialisasi (misal, penurunan kelas normal).
|
|
Komponen dapat dilampirkan ke beberapa perilaku dan selanjutnya melakukan 'multipel penurunan'.
|
|
|
|
Kelas perilaku harus mengimplementasikan antar muka [IBehavior]. Umumnya perilaku dapat
|
|
diperluas dari kelas basis [CBehavior]. Jika perilaku perlu dilampirkan ke sebuah
|
|
[model](/doc/guide/basics.model), ia juga bisa diperluas dari [CModelBehavior] atau
|
|
[CActiveRecordBehavior] yang mengimplementasikan fitur tambahan tertentu untuk model.
|
|
|
|
Untuk menggunakan perilaku, ia harus dilampirkan ke sebuah komponen lebih dulu dengan memanggil metode
|
|
perilaku [attach()|IBehavior::attach]. Kemudian kita memanggil metode perilaku melalui komponen:
|
|
|
|
~~~
|
|
[php]
|
|
// $name secara unik mengidentifikasi behavior dalam komponen
|
|
$behavior->attach($name,$component);
|
|
// test() adalah metode $behavior
|
|
$component->test();
|
|
~~~
|
|
|
|
Perilaku yang dilampirkan dapat diakses seperti layaknya properti komponen.
|
|
Sebagai contoh, jika perilaku bernama `tree` dilampirkan ke komponen, kita
|
|
bisa memperoleh referensi ke obyek perilaku ini menggunakan:
|
|
|
|
~~~
|
|
[php]
|
|
$behavior=$component->tree;
|
|
// sama dengan kode berikut:
|
|
// $behavior=$component->asa('tree');
|
|
~~~
|
|
|
|
Sebuah perilaku dapat dimatikan sementara agar metodenya tidak tersedia pada komponen.
|
|
Sebagai contoh,
|
|
|
|
~~~
|
|
[php]
|
|
$component->disableBehavior($name);
|
|
// pernyataan berikut akan memunculkan eksepsi
|
|
$component->test();
|
|
$component->enableBehavior($name);
|
|
// ia bekerja sekarang
|
|
$component->test();
|
|
~~~
|
|
|
|
Dimungkinkan bahwa dua perilaku dilampirkan ke komponen yang sama yang memiliki nama metode yang sama.
|
|
Dalam hal ini, perilaku metode pertama yang akan diprioritaskan.
|
|
|
|
Ketika dipakai bersama dengan [event](#component-event), perilaku bahkan lebih bertenaga.
|
|
Sebuah perilaku, bila dilampirkan ke sebuah komponen dapat melampirkan beberapa metodenya ke beberapa event
|
|
komponen. Dengan melakukan itu, perilaku mendapat kesempatan untuk mengawasi atau mengubah alur
|
|
eksekusi normal komponen.
|
|
|
|
<div class="revision">$Id: basics.component.txt 1328 2009-08-15 18:45:51Z qiang.xue $</div> |