0

Yii のカスタム検証ルールに問題があります。day1sday1eday2sなどのフィールドがありますday2e。新しいレコードを作成する前に、これらの属性の値がデータベースに格納されているかどうかを確認したいと思います。また、別のユーザーIDも確認してください。値が既に存在する場合は、エラーを生成し、ユーザーに値を変更するように求めます。私はこのようなことをすることを考えました:

 array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change'),

このような作業ですが、変更したいと思います。これのデフォルト値は です。"00:00"このルールを設定すると、新しいレコードを作成するたびに、初回を除いてエラーが生成されます。のときは無視したいday1s==00:00。また、ユーザーが変更された場合(私の場合、ユーザーはSchoolIDです)。その方法について頭を悩ませています。前もって感謝します!

4

2 に答える 2

1

ルールに allowEmpty を追加します。

array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change', 'allowEmpty'=>true),

検証前にコントローラーに次のコードを追加します。

if($model->day1s == "00:00") {
   $model->day1s = '';
} 
于 2015-09-09T15:08:32.737 に答える
0

返事が大変遅くなり申し訳ありません。コントローラーでは、私のアクション Create?Before $model->save?I で試してみましたが、うまくいかないようです。私は自分のモデルで次のような関数を作成することを考えました:

public function unique() {       
 if ($this->day1s == "00:00" || $this->day1s == "0:00") {

       $this->day1s='';//here it seems to work for the 00:00
 } else {
     //but my rule gets ignored now for any other values. What can I add here to make it work?
 }

また、質問を編集する代わりに回答を投稿して申し訳ありません。

私は最終的にそれを理解しました:私のルールは次のようなものです:

array('day1s,day1e, day2s, day2e, day3s, day3e, day4s, day4e, day5s, day5e, day6s, day6e, day7s, day7e','unique','message'=>'This already exist, please change', 'allowEmpty'=>true,
                 'criteria' => array(
                 'condition' => 'schoolid=:schoolid',
                 'params' => array(':schoolid' => $this->schoolid))
               ),

私のコントローラーは次のようなものです:

if ($model->day1s == "00:00" || $model->day1s == "0:00") {
    $model->day1s='';//for custom validation rule 'unique'
                    } 
if ($model->day1e == "00:00" || $model->day1e == "0:00") {
                            $model->day1e='';
                    }
 .....
 if($model->validate()){
        if($model->save())
                    $this->redirect('admin');}
    }  

ご協力いただきありがとうございます。

于 2015-09-10T09:10:23.733 に答える