Yii为ActiveRecord订制新方法
来源:互联网 发布:serverless 阿里云 编辑:程序博客网 时间:2024/04/27 23:32
转载请注明来自souldak,微博:@evagle
如果你的model是继承自CActiveRecord的,那么你可以有很多CActiveRecord的内置方法可以使用,非常方便。但有的时候比如我们想实现一个比较通用的toJson方法,这个时候如果你为每一个model都实现一遍,显然是比较麻烦的,而且很多可重用的代码没有利用起来。这个时候就可以先实现一个类假设叫TActiveRecord,它继承自CActiveRecord,但是覆盖behavior方法。然后model再继承自TActiveRecord,那就可以使用自己定制的behavior方法了。
class TActiveRecord extends CActiveRecord{public function behaviors() { return array( 'IJsonBehavior'=>array( 'class'=>'application.behaviors.IJsonBehavior' ), );}}
然后IJsonBehavior类实现如下:
<?phpclass IJsonBehavior extends CBehavior{ private $owner; private $relations; public function toJson() { $this->owner = $this->getOwner(); if (is_subclass_of($this->owner,'CActiveRecord')){ $attributes = $this->owner->getAttributes(); return Json::encode($attributes); } return false; } public function fromJson($json){ $this->owner = $this->getOwner(); if (is_subclass_of($this->owner,'CActiveRecord')){ $this->owner->setAttributes(CJSON::decode($json)); foreach(json_decode($json) as $key=>$val){ $this->owner->setAttribute($key,$val); } } }}
将IJsonBehavior放在protected/behavior 文件夹下即可。
然后我们再建一个model继承自TActiveRecord
<?phpclass TModel extends TActiveRecord{ public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return 'tt';//数据库表名 }}然后TModel就自动有toJson和fromJson方法了. 按照如下方法调用即可:
$model = new TModel;$json = $model->toJson();有不明白的可以评论或者微博@evagle
- Yii为ActiveRecord订制新方法
- YII优化 ActiveRecord schema
- Yii CFormModel ActiveRecord 详解
- yii ActiveRecord 学习收集
- Yii ActiveRecord 简介
- yii activerecord 的生命周期
- yii已有类增加新方法
- Yii ActiveRecord用法记录备忘
- CodeSmith 使用教程(15) 为Yii Framework 创建生成ActiveRecord的代码模板
- CodeSmith 使用教程(15) 为Yii Framework 创建生成ActiveRecord的代码模板
- 为WINCE5订制系统界面
- Yii之ActiveRecord内存泄漏问题
- Yii模型 AR(ActiveRecord)学习总结
- Yii框架中ActiveRecord使用Relations
- yii ActiveRecord 输出运行sql语句
- Yii中处理前后台登录新方法
- Yii中处理前后台登录新方法
- Yii中处理前后台登录新方法
- 黑马程序员——java第十八、十九天:IO流(一)
- 九月,写满了记忆的芬芳
- 阿道夫.希特勒和他的第三帝国
- phpcms v9后台美化
- .sdp文件(h264)获取sps和pps
- Yii为ActiveRecord订制新方法
- LATEX常见问题
- IOS开发之----NSDateFormatter调整时间格式
- openwrt install
- 大型企业计算机终端安全管理现状与策略分析
- cf160B Unlucky Ticket
- 基于内存数据库的分布式数据库架构
- 暖秋,静美如此
- android ndk集成第三方库或可执行文件