博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
aftersave 生命周期函数
阅读量:7039 次
发布时间:2019-06-28

本文共 1130 字,大约阅读时间需要 3 分钟。

项目中,遇到这样的场景:

需要把用户提交的数据保存到 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表中没有记录)

转载于:https://blog.51cto.com/44855/2171148

你可能感兴趣的文章
python04 while循环
查看>>
web 开发之酷炫--- 酷炫展示
查看>>
ubuntu 解压命令全部
查看>>
Chrome教程(一)NetWork面板分析网络请求
查看>>
第十八回  基础才是重中之重~开发人员应学会用throw
查看>>
Rosenblatt's perceptron
查看>>
1570:基础练习 分解质因数
查看>>
判断ie浏览器7、8、9三个版本
查看>>
GDUFE ACM-1124
查看>>
Schwarz积分公式
查看>>
工作中常用的 Linux 命令
查看>>
English Corner
查看>>
(最短路 SPFA)Invitation Cards -- poj -- 1511
查看>>
两数相加LeetCode
查看>>
列表生成 加1四种方法
查看>>
springboot 处理后端long传给前端精度丢失问题
查看>>
Issue 2:Introduction 方法论
查看>>
[译文]扩展Repeater控件以支持DataPager分页
查看>>
知名网站内部资料:WEB页面内容优化管理与性能技巧
查看>>
20+个可重复使用的jQuery代码片段
查看>>