2016-04-27 2 views
0

エラーが表示されません:各モデルのYii2のAjaxのActiveFormの検証は、単一のコントローラにAJAXを検証することを、私は形で5種類のモデルを持っている

public function performAjaxValidation($model1, $model2, $model3, $model4, $model5) { 
    Yii::$app->response->format = Response::FORMAT_JSON; 
    return ActiveForm::validateMultiple([$model1, $model2, $model3, $model4, $model5]); 
} 

、私は「ユニークな」ルール等を有していて:

[['COUNTRY_LABEL'], 'required', 
    'when' => function ($model) { 
     return ($model->COUNTRY_ID == 0) || is_null($model->COUNTRY_ID); 
    }, 'whenClient' => "function (attribute, value) { 
     return ($('#country-country_id').val() == 0) || ($('#country-country_id').val() == \"\"); 
    }"], 

[['COUNTRY_LABEL'], 'unique', 'message' => 'Country already exist.')], 

ともっと...

そして単一のビュー:

  <?php 
      $form = ActiveForm::begin([ 
         'options' => ['enctype' => 'multipart/form-data',], 
         'enableAjaxValidation' => true, 
      ]); 
      ?> 
      <?= $form->field($countryModel, 'COUNTRY_LABEL')->textInput(['maxlength' => true]) ?> 

JSONが正常に動作し、私の見解では「空ではありません」というメッセージが表示されます。 'COUNTRY_LABEL'が一意であるかどうかをテストする場合、JSONは 'country already exists'を返しますが、ビューにメッセージを表示しません。

私は間違っていますか?

答えて

1

まず第一に、あなたはあなたのフォームでidを設定する必要があります。

$form = ActiveForm::begin([ 
    'id' => 'contact-form', 
    'enableAjaxValidation' => true, 
]); 

ます。また、それはAJAXの検証要求を処理できるように、サーバーを準備する必要があります。これは、コントローラのアクションで、次のようなコードスニペットによって達成することができます。

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

そして最後に、これは私が私の見解で返されたJSONの結果を処理するために使用する方法(この場合には、埋めるためにdataを反復されます選択フィールド):

 $.post('" . Yii::$app->urlManager->createUrl('some/action') . "', {id: $('#someform-attrib_id').val()}, function (data) { 
      $.each(data, function (key, obj) { 
       someSelect.append($('<option>').val(obj.id).text(obj.name)); 
      }) 
     }); 
関連する問題