在 yii2 中使用自定义 ID 进行 Ajax 验证

kri*_*tel 5 validation ajax yii2

我在 foreach 循环中有一个相同的字段,如下所示

foreach ( $subCategoryData as $k => $val) {
    <?= $form->field($model, 'sub_category', ['template' => '{input}'])->textInput(['maxlength' => 255, 'class' => 'form-control required section_name', 'name' => "Category[sub_category][$k][name]"]) ?>
} ?>
Run Code Online (Sandbox Code Playgroud)

我使用自定义方法进行 ajax 验证,它工作正常。

但它只使用第一个输入。因为它有相同的ID。

但是当我'inputOptions' => ['id' => 'myCustomId']用下面的方式改变它并使它独一无二时,我的ajax验证没有被调用。

foreach ( $subCategoryData as $k => $val) {
    <?= $form->field($model, 'sub_category', ['template' => '{input}','inputOptions' => ['id' => "category-sub_category_".$k]])->textInput(['maxlength' => 255, 'class' => 'form-control required section_name', 'name' => "Category[sub_category][$k][name]"]) ?>
}
Run Code Online (Sandbox Code Playgroud)

我在这里看到了这个解决方案 https://github.com/yiisoft/yii2/issues/7627

还看到了这个 /sf/answers/1992230971/

但是没有任何工作可以帮助我吗?

use*_*206 2

你的问题和你介绍的帖子不一样。您应该使用 loadMultiple。

例子:

if (\Yii::$app->request->isAjax) {
    if (\yii\base\Model::loadMultiple($model,\Yii::$app->request->post())) {
        \Yii::$app->response->format = Response::FORMAT_JSON;
        echo json_encode(ActiveForm::validateMultiple($model));
        \Yii::$app->end();
    }
}

if ( \yii\base\Model::loadMultiple($model, Yii::$app->request->post()) &&  \yii\base\Model::validateMultiple($model)) {
      foreach ($model as $models) {
          $models->save(false);
      }
Run Code Online (Sandbox Code Playgroud)

视图中:

<?php $form = ActiveForm::begin([
      'enableAjaxValidation' => true,
   ]);
Run Code Online (Sandbox Code Playgroud)