Di dalam Yii framework terdapat konsep Behavior. Fitur ini memungkinkan kita untuk memasang method atau fungsi ke suatu kelas ataupun objek. Fungsi ini membuat kelas-kelas yang dibuat kita menjadi sangat fleksibel.
Untuk membuat sebuah behavior kita harus membuat sebuah kelas yang diturunkan dari IBehavior(ataupun turunannya seperti CBehavior, CModelBehavior atau CActiveRecordBehavior). Untuk memudahkan penjelasan behavior maka kita akan membuat sebuah behavior sederhana untuk menunjukkan cara pembuatan dan penggunaannya. Behavior ini kita namakan JsonBehavior karena akan menghasilkan nilai suatu AR dalam format JSON.
class JsonBehavior extends CModelBehavior{ public function toJson(){ $owner = $this->owner; //owner merupakan object yang akan kita attach $attributes = $owner->attributes; //ambil nilai attributes return CJSON::encode($attributes); //ubah hasilnya menjadi format JSON } }
Setelah selesai membuat kelas behavior maka langkah berikutnya kita bisa memasangkannya ke model. Cara pemasangan ada dua cara. Pertama memasang langsung di koding model bersangkutan. Misalnya kita mempunyai sebuah model bernama ‘Mahasiswa’. Maka kita cukup membuat file Mahasiswa.php di folder models, dan memasukkan koding ini:
public function behaviors() { return array( 'JsonBehavior'=>array( //JsonBehavior adalah nama behavior, yang terserah dinamakan apa saja, asal jangan ada yang sama 'class'=>'application.behaviors.JsonBehavior' //asumsi kita menyimpan file JsonBehavior di folder protected/behaviors ), ); }
Untuk menggunakannya maka cukup menulis
$mahasiswa = Mahasiswa::model()->findByPk(1); //mengambil data mahasiswa dengan ID 1 echo $mahasiswa->toJson();
Selain dengan memasang di model, kita juga bisa memasang coding secara on-the-fly, yakni memasang ke objek bersangkutan dengan fungsi attachBehavior(). Berikut contoh code-nya:
$mahasiswa = Mahasiswa::model()->findByPk(1); //mengambil data mahasiswa dengan ID 1 Yii::import('application.components.behaviors.JsonBehavior'); //sebelumnya import dulu supaya Yii mengenali kelas JSonBehavior $mahasiswa->attachBehavior('json', new JsonBehavior); //pasangkan behavior ke objek mahasiswa echo $mahasiswa->toJson(); //tinggal digunakan
Demikianlah fleksibilitas dari Behavior yang bebas dipasangkan ke kelas ataupun objek. Contoh behavior mengkonversi ke Json ini terinspirasi dari tutorial Antonio Ramirez, salah satu aktivis Yii. Contoh coding yang diambil penulis juga merupakan versi sederhana dari EJsonBehavior dari Ramirez karena tujuan utama artikel ini hanya memperkenalkan Behavior. Jika ingin mengenali lebih dalam, bisa mencoba membaca artikelnya.
Dengan adanya behavior maka kita tidak terjebak untuk menggunakan kelas statik (yang cenderung kurang bagus dalam konsep Object Oriented apalagi mengingat di Yii 2.0 kelak akan memanfaatkan namespace) ataupun inheritance yang cenderung mubazir. Bagaimana pendapat Anda? Jika memiliki pandangan lain tentang Behavior di Yii silahkan kemukakan di sini.
mantap gan, penjelasan yg bagus dan jelas. sy jadi ngerti penggunaaan behaviour. terima kasih
Sep gan. terima kasih sudah singgah di blog kami
thanks gan.. sharingnya, ada sedikit pertanyaan nih…
lalu apa bedanya kalau kita buat saja method di activerecordnya ?
semisal:
class Mahasiswa extends CActiveRecord{
public function toJson(){
}
}
thanks
Yup, bisa langsung pasang, kalau memang method itu sering digunakan. Tetapi kalau jarang digunakan ataupun tidak logis kalau pasang ke kelas, maka lebih bagus dibuat ke behavior.
Kelebihan lain behavior bisa di-attached ataupun di-deattached.
Trus misalnya kita ingin buat third party extension jadi orang lain bisa pakai fungsi toJSON(), maka cara terbaik adalah dalam bentuk behavior bukan?
Contoh yang memanfaatkan behavior di extension itu Rights. Agan bisa mempelajarinya juga
[...] karena ingin bisa digunakan di projek lain. Extension bisa bermacam-macam, misalnya berupa behavior, widget dan lain-lain. Untuk tutorial kali ini, Anda akan membuat sebuah extension jenis [...]
[...] ingin bisa digunakan di projek lain. Extension bisa bermacam-macam, misalnya berupa behavior, widget dan lain-lain. Untuk tutorial kali ini, Anda akan membuat [...]