aftersave 生命周期函數
阿新 • • 發佈:2018-09-06
foreach reac 幫我 服務器 EDA 記錄 add () filter 項目中,遇到這樣的場景:
需要把用戶提交的數據保存到 look 表,同時表單中的 add_img 圖片地址數組,分別保存到 lookmeida 表。
這個多出來的,保存圖片的功能,不需要改動控制器的代碼,借助 Model 的 afterSave 生命周期函數,就可以自動幫我們完成。原理是look表的記錄保存(或者修改)之後,會產生一個 lookid ,然後我們將這個lookid 和 mediaurl 存儲到 lookmedia表中去。
上代碼吧,打字說不清楚
需要把用戶提交的數據保存到 look 表,同時表單中的 add_img 圖片地址數組,分別保存到 lookmeida 表。
這個多出來的,保存圖片的功能,不需要改動控制器的代碼,借助 Model 的 afterSave 生命周期函數,就可以自動幫我們完成。原理是look表的記錄保存(或者修改)之後,會產生一個 lookid ,然後我們將這個lookid 和 mediaurl 存儲到 lookmedia表中去。
上代碼吧,打字說不清楚
public function afterSave($insert,$changedAttributes) { if (Yii::$app->id==‘app-backend‘){ //保存圖片字段 $add_imgarr=$this->add_img; if ($add_imgarr){ foreach (array_filter($add_imgarr) as $mediaurl){ $lookmedia=new Lookmedia(); $lookmedia->lookid=$this->lookid; $lookmedia->mediaurl=$mediaurl; $lookmedia->type=0; $lookmedia->save(); } } } if (parent::afterSave($insert,$changedAttributes)) { return true; }else return false; }
這裏只提三點,也算是幾個坑吧:
1)afterSave 的參數,$insert 和 $changedAttributes 是固定寫法,必須要有,否則報錯。
2)函數內部,在本地環境中,我之前寫的是 beforeSave 無報錯,程序運行正常;但移植到服務器上之後,會報錯,於是改為 afterSave 後正常。
3)實測,我們新增的邏輯,必須放在 parent 函數之外,否則不會被執行(圖片已經上傳,但是lookmedia表中沒有記錄)
aftersave 生命周期函數