看板 Mesak
作者 mesak (Mesak)
標題 [PHP] YII2 JSON 儲存載入
時間 2015-11-06 Fri. 11:54:38


有些欄位要利用 JSON 存取純資料欄位,可利用 Event 寫入與讀取的方式來把資料處理過再丟回

參考https://github.com/yiisoft/yii2/issues/3495
    public function behaviors()
    {
        return [
            'json_save' => [
                'class' => 'yii\behaviors\AttributeBehavior',
                'attributes' => [
                    self::EVENT_BEFORE_UPDATE => ['data'],
                    self::EVENT_BEFORE_INSERT => ['data'],
                ],
                'value' => function ($event) {
	
	
	
	
	
if ( !Json::is_json($this->data) ) {
	
	
	
	
	
	
$this->data = Json::encode($this->data);
	
	
	
	
	
}
               
	
return $this->data;
                }
            ],
            'json_load' => [
                'class' => 'yii\behaviors\AttributeBehavior',
                'attributes' => [
           
	
	
self::EVENT_AFTER_FIND => ['data'],
           
	
],
                'value' => function ($event) {
                    if( Json::is_json($this->data) ) {
                   
	
return Json::decode($this->data);
               
	
}
                }
            ],
        ];
     }

'data' 必須是欄位名稱,可以是字串 OR 陣列


驗證部分要加一個 saft 才會儲存
    public function rules()
    {
        return [
           [['data'], 'safe'],
        ];
    }
--
Mesak Blog
http://mesak.tw
--
※ 作者: mesak 時間: 2015-11-06 11:54:38
※ 編輯: mesak 時間: 2015-11-06 11:56:07