码迷,mamicode.com
首页 > 其他好文 > 详细

aftersave 生命周期函数

时间:2018-09-06 14:40:07      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:存储   code   func   ken   yii   实测   字段   each   false   

项目中,遇到这样的场景:
需要把用户提交的数据保存到 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 生命周期函数

标签:存储   code   func   ken   yii   实测   字段   each   false   

原文地址:http://blog.51cto.com/44855/2171148

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!