文档章节

Yii学习笔记::模型自动完成

吾爱
 吾爱
发布于 2013/12/29 20:02
字数 431
阅读 830
收藏 4

首先Yii模型是没有自动完成这个功能的,它只有验证validate()。

当我们调用AR模型的save()功能时,会自动调用validate(),紧接着数据就入库了。

现在我表单中获取到密码的字段,我入库前肯定要进行加密啊,还有注册时间字段,也需要自动生成一个时间戳,在手册里我找到一个 

$post->create_time=new CDbExpression('NOW()');

这玩意是数据库里的函数啊,无法做到复杂的逻辑啊!!

怎么办?想啊想,想到了事件功能,我找啊找,打开validate()的源码,发现有两个事件:beforeValidate() afterValidate()。

到这里思路就比较清晰了,我们的目的就是入库前填充或修改一些字段,那么我们从 afterValidate()这个方法入手就行了。

我们发现,这个方式里是有内容的,主要就是触发事件用的,我们这里不那么麻烦去注册事件了,直接在自己的模型类里面重载它,当然不要忘了parent::afterValidate();不然事件钩子就没了。

    //验证前的数据处理
    public function afterValidate(){
        parent::afterValidate();
        $this->password = md5($this->password);
        $this->password1 = md5($this->password1);
        $this->addtime = time();
        $this->expire = time()+86400*3;
        return true;
    }

看,这就是达到了自动完成的效果,最后返回true即可。

© 著作权归作者所有

共有 人打赏支持
吾爱
粉丝 142
博文 267
码字总数 90553
作品 0
后端工程师
私信 提问
加载中

评论(3)

荒野无灯
荒野无灯

引用来自“~\(≧▽≦)/~”的评论

建议在bforesave事件中处理
+1 . 像上面文章中那样用的话,如果定义了一个password max length 是16 ,那么md5后变32位,会导致validate失败.在 beforeSave 中做如上自动完成动作是最好的.
~\(≧▽≦)/~
~\(≧▽≦)/~
建议在bforesave事件中处理
别人说我名字很长
别人说我名字很长
这个吊啊老爱,很实用
Yii学习笔记:利用setFlash和runController打造个性化的提示信息页面

在实现Yii::success()这样的调用方式之前,你可能需要阅读我的这篇博文: 《Yii学习笔记:扩展YiiBase入口类》 之后请继续往下看: 首先我们在yii.php的Yii类里面添加两个方法: /** 成功提示...

吾爱
2013/12/28
0
0
技术积累笔记概要

2015年11月24日 1、rest 速率限制,写属于自己的方法。 2、actions方法深刻了解。 3、YII技术博客:http://blog.csdn.net/terrywater/article/category/2565815。 4、静态方法传递参数的习惯...

风清扬-深圳
2015/11/24
78
0
Yii学习笔记:扩展YiiBase入口类

通过yiic.php自动创建一个应用后,入口文件初始代码如下: <?php// change the following paths if necessary$yii=dirname(FILE).'/../yii/framework/yii.php';$config=dirname(FILE).'/prot......

吾爱
2013/12/27
0
1
yii2学习笔记--修改css和js文件(未完成)

(未完成,陆续添加内容) 一、通过模板文件添加的js和css如何修改: 1.1 修改AppAsset.php之中的css、js 假设模板文件为 views/layouts/main.php,观测可知其中有一句: AppAsset::register...

路过暴风
2016/01/06
813
1
实用的Laravel Debug调试工具

转载请注明: 转载自Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 实用的Laravel Debug调试工具 主要推荐laravel几个适合开发调试用的工具 1.Clockwork 首先Chrome 插件 Clockwork 安装 Co...

Yuansir
2015/01/19
0
2

没有更多内容

加载失败,请刷新页面

加载更多

对接比特币钱包的PHP开发包

BtcTool是一个基于第三方服务和离线裸交易实现的PHP比特币应用开发包,适合不希望部署本地 节点旳PHP开发者,开发包主要包含以下特性: 利用第三方服务获取指定地址的utxo集合 离线生成消费裸...

汇智网教程
2分钟前
0
0
【自用】 VHD to VHDX

VHDX: 在VHD 2TB 的基础上提供 64TB的容量。 支持逻辑扇区大小为 4KB,和每块的大小为 256MB,来优化虚拟磁盘性能。 比VHD提供更高的安全性、可靠性和性能。 convert-VHD –path d:\Hyper-v...

Tensor丨思悟
14分钟前
0
0
30 岁转行做Python开发晚吗?而且是零基础

最近有小伙伴问小编,30 岁转行做Python开发晚吗? 小编想说,其实无论男女,只要想学,有这个动力,就直接去行动。无论年龄,无论性别,只要你想一直勇往直前,那么想做的就去做吧~这里有一...

糖宝lsh
25分钟前
7
0
详解Spring中的Profile

前言 由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、数据库连接、Redis服务器地址等),导致实际现网的配置参数与测试服务器参数混淆...

watermelon11
40分钟前
4
0
phper必知必会(二)

  1.说说你对进程,线程以及协程的理解      进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础。进程是程序基本执行的实体。进程与进程之间是独立的,拥有完全独立...

SEOwhywhy
56分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部