这篇教程讲解了怎样不使用代码来实现自动填充模型中的字段值。
我正在做一个大项目的管理面板,在所有的数据库表中几乎都包含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! :)