对于 `Comment` 模型,我们主要需要自定义 `rules()` 和 `attributeLabels()` 方法。`attributeLabels()` 方法返回属性名称和属性标签之间的映射。我们不需要修改 `relations()`,因为 `Gii` 工具生成的代码已经足够好了。
我们首先自定义 `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。
然后我们自定义 `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`,将生成标签 `创建时间`。
因为我们想要记录评论的创建时间,所以我们像对 `Post` 模型一样重写 `Comment` 的 `beforeSave()` 方法
protected function beforeSave()
{
if(parent::beforeSave())
{
if($this->isNewRecord)
$this->create_time=time();
return true;
}
else
return false;
}
发现错别字或您认为此页面需要改进?
在 github 上编辑它 !
在 beforeValidate 而不是 beforeSave 中生成 Markdown
帖子内容在 beforeValidate() 而不是 beforeSave() 中使用 CMarkdownParser 解析的原因(您可能认为),是为了在帖子创建页面的“预览”按钮上使用时解析内容。
为了发表评论,请注册或登录。