Komponen

Aplikasi Yii dibangun dari komponen-komponen yang berupa objek yang ditulis ke sebuah spesifikasi. Sebuah komponen adalah instance dari CComponent atau kelas induknya. Pemakaian komponen meliputi pengaksesan propertinya dan memunculkan/menangani event-nya. Kelas dasar CComponent menetapkan bagaimana untuk mendefinisikan properti dan event.

1. Properti Komponen

Properti komponen seperti variabel anggota public sebuah objek. Kita dapat membaca nilainya atau menempatkan sebuah nilai ke dalamnya. Sebagai contoh,

$width=$component->textWidth;     // ambil properti textWidth
$component->enableCaching=true;   // setel properti enableCaching

Untuk mendefinisikan properti komponen, kita cukup mendeklarasikan variabel anggota public dalam kelas komponen. Cara yang lebih fleksibel adalah dengan mendefinisikan metode getter (pengambil) dan setter (penyetel) seperti berikut:

public function getTextWidth()
{
    return $this->_textWidth;
}
 
public function setTextWidth($value)
{
    $this->_textWidth=$value;
}

Kode di atas mendefinisikan properti yang bisa ditulis bernama textWidth (nama bersifat case-sensitive). Ketika membaca properti, getTextWidth() dipanggil dan nilai yang dihasilkannya menjadi nilai properti; Demikian juga pada saat menulis properti, setTextWidth() yang dipanggil. Jika metode penyetel tidak didefinisikan, properti akan menjadi hanya-baca(read-only) dan menulisinya akan memunculkan sebuah exception. Menggunakan metode pengambil dan penyetel untuk mendefinisikan sebuah properti memiliki manfaat bahwa logika tambahan (seperti melakukan validasi, memunculkan event) dapat dijalankan saat membaca dan menulis properti.

Catatan: Ada sedikit perbedaan antara properti yang didefinisikan via metode pengambil/penyetel dan variabel anggota kelas. Nama pengambil/penyetel tidak bersifat case-sensitive sementara variabel anggota kelas bersifat case-sensitive..

2. Event Komponen

Event komponen adalah properti khusus yang mengambil metode (disebut pengendali event) sebagai nilainya. Melampirkan (menempatkan) sebuah 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 terduga selama tahap 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 case-sensitive. Kode berikut mendefinisikan sebuah event onClicked:

public function onClicked($event)
{
    $this->raiseEvent('onClicked', $event);
}

di mana $event adalah instance dari CEvent atau anak kelasnya yang menyediakan parameter event.

Kita dapat melampirkan sebuah metode ke event ini seperti berikut:

$component->onClicked=$callback;

dengan $callback merujuk ke PHP callback yang benar. $callback bisa berupa fungsi global atau metode kelas. Jika berupa metode kelas, callback harus dibentuk sebagai array: array($object,'methodName').

Tanda pengenal event harus seperti berikut:

function methodName($event)
{
    ......
}

dengan $event merupakan parameter yang menjelaskan event (berasal dari panggilan raiseEvent()). Parameter $event adalah instance dari CEvent atau kelas induk. Pada kondisi minimum, parameter ini berisi informasi mengenai siapa yang memunculkan event.

Sebuah event handler dapat berupa fungsi anonim yang didukung PHP 5.3 atau ke atas. Misalnya,

$component->onClicked=function($event) {
    ......
}

Jika kita memanggil onClicked() sekarang, event onClicked akan dijalankan (di dalam onClicked()), dan pengendali event terlampir akan dipanggil secara otomatis.

Sebuah event dapat dilampirkan ke beberapa pengendali. Saat event dijalankan, pengendali akan dipanggil dengan urutan yang dilampirkan ke event. Jika sebuah pengendali memutuskan untuk menghindari pemanggilan pengendali berikutnya, bisa dilakukan dengan menyetel $event->handled menjadi true.

3. Behavior Komponen

Komponen mendukung pattern mixin dan dapat dilampirkan dengan satu atau beberapa behavior. Sebuah behavior(perilaku) adalah objek yang metodenya bisa 'inherited' (diturunkan) dengan komponen lampirannya dalam arti pengumpulan fungsionalitas alih-alih spesialisasi (misal, penurunan kelas normal). Komponen dapat dilampirkan ke beberapa behavior dan selanjutnya melakukan 'multi penurunan(multiple inheritance)'.

Kelas behavior harus mengimplementasikan antar muka(interface) IBehavior. Kebanyakan behavior dapat diturunkan dari kelas basis CBehavior. Jika perlu dilampirkan ke sebuah model, maka behavior bisa diturunkan dari CModelBehavior atau CActiveRecordBehavior yang mengimplementasikan fitur tambahan tertentu untuk model.

Untuk menggunakannya, behavior harus dilampirkan ke sebuah komponen terlebih dahulu dengan memanggil metode attach(). Kemudian kita memanggil metode behavior melalui komponen:

// $name secara unik mengidentifikasi behavior dalam komponen
$behavior->attach($name,$component);
// test() adalah metode $behavior
$component->test();

Behavior yang dilampirkan dapat diakses seperti layaknya properti komponen. Sebagai contoh, jika behavior bernama tree dilampirkan ke komponen, kita bisa memperoleh referensi ke obyek perilaku ini menggunakan:

$behavior=$component->tree;
// sama dengan kode berikut:
// $behavior=$component->asa('tree');

Sebuah behavior dapat dinonaktifkan sementara agar metodenya tidak tersedia pada komponen. Sebagai contoh,

$component->disableBehavior($name);
// pernyataan berikut akan memunculkan exception
$component->test();
$component->enableBehavior($name);
// ia bekerja sekarang
$component->test();

Dimungkinkan bahwa dua behavior dilampirkan ke komponen yang sama yang memiliki nama metode yang sama. Dalam hal ini, metode behavior pertama yang akan diprioritaskan.

Ketika dipakai bersama dengan event, behavior akan lebih powerful. Sebuah behavior, 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.

Properti behavior juga dapat diakses melalui komponen yang dilampirkannya. Properti -propertinya termasuk variabel member publik dan properti yang didefinisikan melalui getter dan/atau setter behavior. Misalnya, sebuah behavior dengan nama xyz dan behavior dilampirkan ke sebuah komponen $a. Kita dapat menggunakan ekspresi $a->xyz untuk mengakses properti behavior.

$Id: basics.component.txt 2890 2011-01-18 15:58:34Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.