0 フォロワー

コメントモデルのカスタマイズ

Commentモデルでは、主にrules()メソッドとattributeLabels()メソッドをカスタマイズする必要があります。 attributeLabels()メソッドは、属性名と属性ラベルのマッピングを返します。 Giiツールによって生成されたコードで十分なので、relations()に触れる必要はありません。

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'),
    );
}

上記では、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',
    );
}

ヒント: 属性のラベルが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で編集してください !