Yii 自动设置模型的字段值

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

场景

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

  • createdDate (记录的创建时间)

  • createdIp (创建记录者的 IP)

  • updatedDate (记录更新的时间)

  • updatedIp (记录更新者的 IP)

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

创建一个新模型:

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

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

[php]
<?php
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 方法会自动判断。

使用新添加的模型:

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

[php]
class User extends CActiveRecord
{

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

[php]
class User extends MasterAdmin
{

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

_ 路径: MyProject\framework\gii\generators\model\ModelCode.php

修改

[php]
public $baseClass='CActiveRecord';

[php]
public $baseClass='MasterAdmin';

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

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

Happy Coding! :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值