Yii2表单AjaxValidation

时间:2015-07-26 20:52:39

标签: php yii2

我尝试在客户端输入后验证某些字段,但是服务器allays正在发送ALL元素的值如何仅使用一个元素而不是全部来获取post请求? Myform.php

$form=\yii\widgets\ActiveForm::begin(['enableAjaxValidation'=>true,'validationUrl'=>\yii\helpers\Url::toRoute(['validate'])]);

echo $form->field($answers_list[202],"answer",['selectors' => ['input' => "#tanswers202-answer"]])
        ->textInput(['class'=>'form-control tmc','id'=>"tanswers202-answer",'name'=>"TAnswers[202][answer]"])->label(false);
echo $form->field($answers_list[203],"answer",['selectors' => ['input' => "#tanswers203-answer",'id'=>'203']])
    ->textInput(['class'=>'form-control tmc','id'=>"tanswers203-answer",'name'=>"TAnswers[203][answer]"])->label(false);


\yii\widgets\ActiveForm::end();

帖子请求如下所示:

array (size=2)  'TAnswers' =>     array (size=1)      'answer' =>         array (size=20)          36 => string '123' (length=3)          37 => string '23' (length=2)          38 => string '3afasf' (length=6)          39 => string '4' (length=1)          40 => string '6' (length=1)          45 => string '' (length=0)          46 => string '' (length=0)          47 => string '' (length=0)          48 => string '' (length=0)          49 => string '' (length=0)          50 => string '' (length=0)          51 => string '' (length=0)          52 => string '' (length=0)          53 => string '' (length=0)          54 => string '123' (length=3)          55 => string '' (length=0)          56 => string '' (length=0)          57 => string '' (length=0)          58 => string '' (length=0)          59 => string '' (length=0)  'ajax' => string 'w0' (length=2)

但应该是这样的:

array (size=2)  'TAnswers' =>     array (size=1)      'answer' =>         array (size=20)   'ajax' => string 'w0' (length=2)

MyController.php

 public function actionValidate()
    {
        $model = new TAnswers();
    if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {


        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

        return ActiveForm::validate($model);
    }

}

1 个答案:

答案 0 :(得分:0)

这就是yii活动表单的工作方式:在每个ajax验证中,发送整个表单。整个表单已经过验证,但默认情况下只会显示当前字段(您刚刚离开的字段)的错误(如果您需要一些javascript,可以显示其他字段的错误)。

您要做的是验证与用于显示表单的模型不同的模型。基本上它与活动形式的模型无关。

你有2个选择(一个好选择,一个坏选择,但你会选择不好的选项,然后后悔):

1)为表单创建一个合适的模型并验证它。更难做到但这是你真正正确的答案。看一下yii安装附带的联系表单模型。没有什么能阻止你根据“东西”动态创建规则和属性数组。除此之外,它还可以轻松验证整个表格 2)停止对表单使用enableAjaxValidation,并仅使用该字段自行触发验证。这看起来很容易,但玩得很开心。

PS:我对某些事情有完全相同的要求。一个由问题组成的表格,每个问题都是它自己的模型保存在自己的EAV行中。最终你会得到一个问题,即一个问题取决于另一个问题的答案,然后会立即后悔选择2.