2017-03-13 7 views
0

ユーザー入力の検証中に、属性と値を比較したいと考えています。Yii2 compareValidatorの場合

私はこのコードを持っている:

['ao_id', 'compare', 'when' => function($model) { 
      return $model->lqp_id == 24 || $model->lqp_id == 26 || $model->lqp_id == 46; 
     }, 'compareValue' => 50], 

それは(但した場合にのみ'enableClientValidation' => false)動作しますが、それは何らかの形で外国属性の名前むしろ示すこと、可能ですか?ユーザーが外面(ao_id)が50でなければならないというエラーメッセージが表示される場合は、あまり役に立ちません。ドロップダウンではIDだけでなくIDだけが表示されるため、何を意味するのかを知る者はいません。どうもありがとう!

答えて

0

messageキーを追加します。デフォルトのメッセージの代わりに表示される独自のメッセージを定義します。

+0

ありがとう、ビズリー! – user2511599

1

まず、条件付き検証がクライアント側でも機能するようにする場合(enableClientValidation=>trueの場合)、検証を行うjavascriptコードを含むwhenClientプロパティを追加します。

第2に、messageプロパティを使用してカスタム検証エラーを指定できます。

[ 
    'ao_id', 
    'compare', 
    'when' => function ($model) { 
     return $model->lqp_id == 24 || $model->lqp_id == 26 || $model->lqp_id == 46; 
    }, 
    'whenClient' => "function (attribute, value) { 
     return $('#lqp_id').val() == '24' || $('#lqp_id').val() == '26' || $('#lqp_id').val() == '46'; 
    }", 
    'compareValue' => 50, 
    'message'=>'ao_id must be 50 when lqp_id is 24, 26 or 46' 
] 

注意:これは最も可能性の高い別の私の例にあるように、入力フィールド$('#lqp_id')のIDを確認し、変更してください。

+0

あなたの答えにも多くの感謝をします。あなたは両方の問題を解決したので、私はあなたにポイントを与えたかったが、ビズリーはより速く、主な質問は「メッセージ」でした。しかし、私はidを自動的に対応する名前に変換するビルトイン関数があることを期待していました。しかし、「メッセージ」は現時点では悪くない。 – user2511599

+0

残念ながら、ルール配列自体の 'id'に対応する' name'をフェッチできる関数はありませんが、_can_でカスタム検証関数を作ることができます。例を見たい場合は、私に教えてください。私は答えを更新します。ああ、あなたが答えに満足すれば+1は大いに評価されるだろう;) – deacs

関連する問題