0 关注者

自定义评论模型

对于 `Comment` 模型,我们主要需要自定义 `rules()` 和 `attributeLabels()` 方法。`attributeLabels()` 方法返回属性名称和属性标签之间的映射。我们不需要修改 `relations()`,因为 `Gii` 工具生成的代码已经足够好了。

1. 自定义 `rules()` 方法

我们首先自定义 `Gii` 工具生成的验证规则。以下规则用于评论

public function rules()
{
    return array(
        array('content, author, email', 'required'),
        array('author, email, url', 'length', 'max'=>128),
        array('email','email'),
        array('url','url'),
    );
}

在上面,我们指定 `author`、`email` 和 `content` 属性是必需的;`author`、`email` 和 `url` 的长度不能超过 128;`email` 属性必须是有效的电子邮件地址;`url` 属性必须是有效的 URL。

2. 自定义 `attributeLabels()` 方法

然后我们自定义 `attributeLabels()` 方法来声明每个模型属性的标签显示。此方法返回一个包含名称-标签对的数组。当我们调用 CHtml::activeLabel() 来显示属性标签时。

public function attributeLabels()
{
    return array(
        'id' => 'Id',
        'content' => 'Comment',
        'status' => 'Status',
        'create_time' => 'Create Time',
        'author' => 'Name',
        'email' => 'Email',
        'url' => 'Website',
        'post_id' => 'Post',
    );
}

**提示:**如果某个属性的标签没有在 `attributeLabels()` 中声明,则会使用算法生成相应的标签。例如,对于属性 `create_time` 或 `createTime`,将生成标签 `创建时间`。

3. 自定义保存过程

因为我们想要记录评论的创建时间,所以我们像对 `Post` 模型一样重写 `Comment` 的 `beforeSave()` 方法

protected function beforeSave()
{
    if(parent::beforeSave())
    {
        if($this->isNewRecord)
            $this->create_time=time();
        return true;
    }
    else
        return false;
}

发现错别字或您认为此页面需要改进?
在 github 上编辑它 !