0

plzコード(データベースのBaseModel)で変更したくないルール関数がいくつかあり、モデルで他のルール関数を作成し、変更したい

ベース1は「変更したくない」

public function rules() {
        return array(
            array('start_date, end_date, info, type_id', 'required'),

            array('start_date, end_date, type_id', 'length', 'max'=>10),

    }

そして、ベースモデルから継承するモデルの他の関数を変更したいのですが、ここにそのコードがあります

public function rules()
    {
        $rules = array(
                    array('start_date, end_date, type_id', 'length', 'max'=>16),
        );
        return array_merge($rules,parent::rules());

    }

最大値を16ではなく10として使用するという問題最後の行を変更しても16にしたい

    return array_merge(parent::rules(),$rules);
4

3 に答える 3

0

それが機能しない可能性がある理由は、順序に関係なく、のルールが'max'=>10まだ存在しrules()ているためです。ルールを置き換えることは私にとってはうまくいきます。

public function rules(){
    $rules=parent::rules();
    $rules[1]=array('start_date, end_date, type_id', 'length', 'max'=>16);
    return $rules;
}

編集

「キー」として使用してルールを置き換えるには、再帰的な配列検索'start_date, end_date, type_id'が必要です。

public function rules(){
    $rules=parent::rules();
    $index=0;//index of the rule
    outer: foreach($rules as $rule){
        if(array_search('start_date, end_date, type_id',$rule)!==false)
             break outer;
        $index++;
    }
    $rules[$index]=array('start_date, end_date, type_id', 'length', 'max'=>16);
    return $rules;
}

これにより、既存のルールがチェックされ、存在しない場合は、の最後の要素としてルールが追加され$rulesます。これは、誰かが基本クラスの最初の要素を編集した場合、たとえば新しいプロパティ/フィールドをルールに追加した場合には機能しません。

于 2013-01-27T22:27:01.630 に答える