Commentモデルのカスタマイズ

Commentモデルでは、主にrules()メソッドとattributeLabels()メソッドをカスタマイズします。attributeLabels()メソッドは属性の名前と属性のラベルの対応表を返します。relations()yiicツールで生成したコードで十分なので手を入れる必要はありません。

1. rules()メソッドのカスタマイズ

最初に、yiicツールで生成したバリデーションルールをカスタマイズします。コメント用のルールは以下の通りです。

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

上記の指定内容は次のような意味です。authoremailcontent属性は必須、authoremailurlは最大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',
    );
}

Tip: attributeLabels()で属性のラベルを宣言していない場合、アルゴリズムに従って適切なラベルが生成されます。例えば、create_timecreateTimeという属性には、Create Timeというラベルが生成されます。

3. 保存プロセスのカスタマイズ

コメントの作成時刻を記録したいので、Postモデルと同様に、CommentbeforeSave()メソッドをオーバーライドします。

protected function beforeSave()
{
    if(parent::beforeSave())
    {
        if($this->isNewRecord)
            $this->create_time=time();
        return true;
    }
    else
        return false;
}
$Id: comment.model.txt 1733 2010-01-21 16:54:29Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.