AttributeBehavior
คือการดักจับ event ต่างๆ ของ model เช่น EVENT_BEFORE_INSERT,EVENT_BEFORE_UPDATE เพื่อที่เราจะทำงานบางอย่าง กับฟิวด์ที่เราต้องการ ดูตัวอย่าง
ตัวอย่างนี้เราต้องการแปลงข้อมูล array ที่ได้จาก CheckBoxList ให้เป็น string ก่อนบันทึกและแก้ไขข้อมูล ซึงเราจะทำการเรียกใช้ฟังก์ชัน behaviors()
ของ model ที่เราใช้งานและเพิ่มฟังกชันนี้เข้าไป
<?php
use yii\behaviors\AttributeBehavior;
use yii\db\ActiveRecord;
// ...
public function behaviors()
{
return [
[
'class' => AttributeBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'skill',
ActiveRecord::EVENT_BEFORE_UPDATE => 'skill',
],
'value' => function ($event) {
return implode(',', $this->skill);
},
],
];
}
จากโค้ดจะเห็นว่าเราทำการเรียกใช้งาน AttributeBehavior
ในฟังก์ชัน behaviors()
และกำหนดคุณสมบัติเข้าไปดังนี้
class
คือชื่อของ behavior ที่เราต้องการใช้ ในตัวอย่างนี้คือ AttributeBehaviorattributes
เป็นการระบุว่าเราจะกระทำข้อมูลในเหตุการณ์อะไร และกับฟิวด์อะไร ซึ่งเราระบุเหตุการณ์ before-insert,before-update และระบุฟิวด์คือ skillvalue
คือส่วนที่เราจะทำงานบางอย่างเพื่อให้ค่ากับ skill ซึ่งในตัวอย่างเราจะทำการแปลงข้อมูลเดิมที่เป็น array ที่ได้จาก CheckBoxLis และแปลงให้เป็น string โดยใช้implode()
น่าจะพอเข้าใจไม่มากก็น้อย ผมคิดว่ามันคงสามารถนำไปประยุกใช้งานกับงานลักษณะอื่นๆ ได้
@dixonSatit