1

Yii CFormModelを拡張するモデルがあり、属性値が空かどうかをチェックし、その場合は入力値を変更する代わりに属性名を空の文字列に設定する検証ルールを定義したいと考えています。

そのようなシナリオは可能ですか、または入力値の警告および/または変更のみを目的とした検証ルールですか?

どんな助けでも大歓迎です。

以下は私のモデルのサンプルコードです:

class LoginForm extends CFormModel
{
    public $firstName;
    public $lastName;

    public function rules()
    {
        return array(
            array('firstName, lastName', 'checkIfEmpty', 'changeAttributeName'),
        );
    }
    // some functions
}
4

3 に答える 3

2

ユースケースが非常にエレガントかどうかはわかりませんが、次のように動作するはずです。

class LoginForm extends CFormModel
{
    public $firstName;
    public $lastName;

    public function rules()
    {
        return array(
            array('firstName, lastName', 'checkIfEmpty'),
        );
    }

    public function checkIfEmpty($attribute, $params) 
    {
        if(empty($this->$attribute)) {
            unset($this->$attribute);
        }
    }

    // some functions
}

ハメドの返信に基づいて、別の方法はbeforeValidate()関数を使用することです:

class LoginForm extends CFormModel
{
    public $firstName;
    public $lastName;

    protected function beforeValidate()
    {
        if(parent::beforeValidate()) {
            foreach(array('firstName, lastName') as $attribute) {
                if(empty($this->$attribute)) {
                    unset($this->$attribute);
                }
            }
        }
    }

}
于 2015-03-05T13:37:03.400 に答える
1

CModel にはbeforeValidate()メソッドがあります。このメソッドは、yii 自動モデル検証の前に呼び出します。LoginForm モデルでオーバーライドする必要があります。

protected function beforeValidate()
    {
        if(parent::beforeValidate())
        {

            if($this->firstname == null)
               $this->firstname = "Some String";
            return true;
        }
        else
            return false;
    }
于 2015-03-05T13:43:05.373 に答える
0

デフォルトのルール セットを使用できます。

public function rules()
{
        return array(
           array('firstName', 'default', 'value'=>Yii::app()->getUser()->getName()),
        );
}

これは、通常はフォームが送信された後の検証時に実行されることに注意してください。フォームの値にデフォルト値は設定されません。afterFind() メソッドを使用してそれを行うことができます。

于 2015-03-07T11:44:06.550 に答える