Yii Framework - Model Event

alfa6661
- May 15, 2015
0 (0 votes)
Rate :
Model Event / Callback pada Yii Framework

Model Event merupakan metode yang dipanggil pada saat tertentu dari siklus object untuk memicu logika sebelum atau setelah perubahan pada object tersebut. Dengan model event memungkinkan kita untuk menulis kode yang akan dijalankan setiap kali sebuah objek Active Record dibuat, disimpan, diperbarui, dihapus, divalidasi, atau diambil dari database.

Method

Berikut adalah daftar callback yang tersedia dalam Active Record.

Method Description
afterConstruct() Metode ini dipanggil ketika instance baru dibuat
afterDelete() Metode ini dipanggil ketika record dihapus
afterFind() Metode ini dipanggil setelah record dipanggil dengan metode find.
afterSave() Metode ini dipanggil setelah menyimpan record.
afterValidate() Metode ini dipanggil setelah record divalidasi
beforeDelete() Metode ini dipanggil sebelum record dihapus
beforeFind() Metode ini dipanggil sebelum record dipanggil dengan metode find.
beforeSave() Metode ini dipanggil sebelum menyimpan record.
beforeValidate() Metode ini dipanggil sebelum record divalidasi

Contoh

Misalnya, untuk satu kasus mungkin kita ingin melakukan sesuatu sebelum data disimpan. Untuk melakukannya kita hanya perlu membuat method beforeSave() dalam model:

# protected/models/YourModel.php
protected function beforeSave() {
    // perintah yang akan di eksekusi
    return parent::beforeSave();
}

Pada kasus nyata penggunaan model event ini salah satunya adalah ketika kita membuat sebuah artikel, kolom user_id harus di set dengan nilai user id yang sedang login. Salah satu cara untuk kasus ini adalah dengan membuat method beforeValidate().

# protected/models/YourModel.php
protected function beforeValidate() {
    if(empty($this->user_id)) {
        $this->user_id = Yii::app()->user->id;
    }
    return parent::beforeValidate();
}

Contoh lain, pada artikel ini di contohkan cara untuk mengatur dua tanggal / waktu nilai kolom melalui skenario:

# protected/models/YourModel.php
public function rules() {
	....
	array('created_at', 'default', 'value'=>new CDbExpression('NOW()'), 'on'=>'insert'),
	array('updated_at', 'default', 'value'=>new CDbExpression('NOW()'), 'on'=>'update'),
}

Solusi lain untuk masalah di atas kita bisa menggunakan method beforeSave() dan set nilai created_at dan updated_at didalam method tersebut. Untuk memastikan apakah data yang di submit merupakan record baru atau data yang diupdate, kita bisa menggunakan fungsi isNewRecord.

# protected/models/YourModel.php
public function beforeSave() {
    if ($this->isNewRecord) {
        $this->created_at = new CDbExpression('NOW()');
    } 
    else {
        $this->updated_at = new CDbExpression('NOW()');
    }
    return parent::beforeSave();
}

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

– Eric S. Raymond

Have a better explanation?

If you have comments about this post. Please write your comments below

No comments associated with this article