2016-10-22 5 views
0

属性account_noで条件付き検証を使用しようとしています。属性account_versionで値 'old'を選択した場合にのみ検証する必要があります。しかし、それは動作していません。私が得ているエラーはnewでも検証が必要です。私は、モデル内の無線ボックスでのYii2条件付き検証

私のコードを検証する代わりにJavaScriptを使用する必要があり

return [ 
     ['account_no', 'required', 'when' => function($model) { 
      return $model->account_version == 'Old'; 
     }], 
     ] 

形で私のコード

<?php if ($model->isNewRecord) {?> 
    <div class="row"> 
     <div class="col-md-2"> 
      <label for="">Account Version</label> 
     </div> 
     <div class="col-md-2"> 
      <?php echo $form->field($model, 'account_version')->radioList(['New'=>'New','Old'=>'Old'])->label(false); ?> 
     </div> 

     <div id="action_block" class="col-md-6"> 
      <div class="col-md-3"> 
       <label for="">Account No:</label> 
      </div> 
      <div class="col-md-3"> 
       <?= $form->field($model, 'account_no')->textInput(['maxlength' => true])->label(false) ?> 
      </div> 
     </div> 
    </div> 
<?php } ?> 

答えて

0
<?php 
return [ 


     ['account_no', 'required', 'when' => function ($model) { 
      return $model->account_no == 'Old'; 
     }, 'whenClient' => "function (attribute, value) { 
      return $('#account_no').val() == 'Old'; 
     }"] 
     ] 


?> 

http://www.yiiframework.com/doc-2.0/guide-input-validation.html [参照リンク]

+0

また、私はまだyii2検証として機能していないことを追加します。ラジオボックスにyii2の条件付き検証に関する問題があるようです。 [これを参照](https://github.com/yiisoft/yii2/issues/7496) – gojiraki

+0

@gojiraki。 Yii 2.0.7で問題が解決され、最新バージョンでは条件付き検証に問題はありません。 Ajaxでうまく動作します。 –

+0

@InsaneSkullテキスト入力ではうまくいくと思うが、ラジオボックスではまだ問題がある。あなたは私にその出来事を教えてくれますか? – gojiraki

0

モデル

[['account_no'], 'required', 'when' => function ($model) { return $model->account_version == 'Old'; }, 'whenClient' => "function (attribute, value) { return $('#modelName[account_version]').val() == 'Old'; }"], 

フォーム

<?php $form = ActiveForm::begin(['id' => 'account-form', 'enableAjaxValidation' => true]); ?> 

コントローラ

if($model->load(Yii::$app->request->post())) { 
    if (Yii::$app->request->isAjax) { 
     Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
     return yii\widgets\ActiveForm::validate($model); 
    } 
}