我尝试在客户端输入后验证某些字段,但是服务器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);
}
}
答案 0 :(得分:0)
这就是yii活动表单的工作方式:在每个ajax验证中,发送整个表单。整个表单已经过验证,但默认情况下只会显示当前字段(您刚刚离开的字段)的错误(如果您需要一些javascript,可以显示其他字段的错误)。
您要做的是验证与用于显示表单的模型不同的模型。基本上它与活动形式的模型无关。
你有2个选择(一个好选择,一个坏选择,但你会选择不好的选项,然后后悔):
1)为表单创建一个合适的模型并验证它。更难做到但这是你真正正确的答案。看一下yii安装附带的联系表单模型。没有什么能阻止你根据“东西”动态创建规则和属性数组。除此之外,它还可以轻松验证整个表格 2)停止对表单使用enableAjaxValidation,并仅使用该字段自行触发验证。这看起来很容易,但玩得很开心。
PS:我对某些事情有完全相同的要求。一个由问题组成的表格,每个问题都是它自己的模型保存在自己的EAV行中。最终你会得到一个问题,即一个问题取决于另一个问题的答案,然后会立即后悔选择2.