Commentモデルでは、主にrules()メソッドとattributeLabels()メソッドをカスタマイズします。attributeLabels()メソッドは属性の名前と属性のラベルの対応表を返します。relations()はyiicツールで生成したコードで十分なので手を入れる必要はありません。
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'), ); }
上記の指定内容は次のような意味です。author、email、content属性は必須、author、email、urlは最大128字、email属性は有効なメールアドレスであること、url属性は有効なURLであること。
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_timeやcreateTimeという属性には、Create Timeというラベルが生成されます。
コメントの作成時刻を記録したいので、Postモデルと同様に、CommentのbeforeSave()メソッドをオーバーライドします。
protected function beforeSave() { if(parent::beforeSave()) { if($this->isNewRecord) $this->create_time=time(); return true; } else return false; }
Be the first person to leave a comment
Please login to leave your comment.