首页 > PHP资讯 > PHP培训技术 > yii-自动设置模型的字段值

yii-自动设置模型的字段值

PHP培训技术

这篇教程讲解了怎样不使用代码来实现自动填充模型中的字段值。

场景

我正在做一个大项目的管理面板,在所有的数据库表中几乎都包含4个同样的字段。

  • createdDate (记录的创建时间)

  • createdIp (创建记录者的 IP)

  • updatedDate (记录更新的时间)

  • updatedIp (记录更新者的 IP)

我已经使用 gii 工具创建了 CURD。现在我需要修改每个模型/控制器来为新添加的4个字段来实现CRUD操作。比较好的方法是将这些代码写到一个地方,让其他的模型来继承使用它。

创建一个新模型:

使用一下代码创建新模型 MasterAdmin,此文件应该放到公共模型的目录下。

你可以在代码的注释中理解它。

 class MasterAdmin extends CActiveRecord { public function beforeSave() { if($this->isNewRecord) // 只有在新建记录时执行 { if($this->hasAttribute('createdDate')) // 如果模型有 createDate 字段 $this->createdDate = new CDbExpression('NOW()'); // 设置 createdDate 的值 if($this->hasAttribute('createdIp')) // 如果模型有 createdIp 字段 $this->createdIp = CHttpRequest::getUserHostAddress(); // 设置用户的 IP } if($this->hasAttribute('updatedDate')) // 如果模型有 updatedDate 字段 $this->updatedDate = new CDbExpression('NOW()'); // 设置 updatedDate 的值 if($this->hasAttribute('updatedIp')) // 如果模型有 updatedIp 字段 $this->updatedIp = CHttpRequest::getUserHostAddress(); // 设置用户的 IP return parent::beforeSave(); } } ?>

也许不是所有的模型都有这四个字段,当你还是可以使用这个模型。hasAttribute 方法会自动判断。

使用新添加的模型:

现在你看到的所有模型都是以下面的方式继承。

class User extends CActiveRecord {

现在使用下面的代码修改它,使它继承新创建的模型。 不用担心 CActiveRecord,因为新创建的 MasterAdmin 已经继承了它。

class User extends MasterAdmin {

如果你不想每次都向上面一样修改代码,你可以通过修改 CURD 的生成模版来做。

_ 路径: MyProjectframeworkgiigeneratorsmodelModelCode.php

修改

public $baseClass='CActiveRecord';

public $baseClass='MasterAdmin';

现在你可以不用写关于这4个字段的任何代码,因为 MaserAdmin 会为你做。

点击 你可以获得更多关于管理面板的帮助

Happy Coding! :)

PHP培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持37不支持0