2015-11-03 37 views
4

我有一个外地在我的大单即Yii2实现对输入外地客户端唯一验证

<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> 

以下是我的ActiveForm选项配置:

<?php 
$form = ActiveForm::begin([ 
      //'id' => 'printerForm',     
      'enableClientValidation' => true, 
      'options' => [ 
       'enctype' => 'multipart/form-data', 
      ] 
]); 
?> 

我想要实现客户端的唯一对此进行验证。我正在使用唯一的验证器,但它只能用于服务器端验证。

public function rules() { 
     return [ 
    [['name'], 'unique'], 
] 
... 
other validations 
... 
}; 

其他验证工作完美,但唯一的客户端验证不起作用。

+0

因为字段名称不能与模型匹配属性名称。 –

+0

显示整个表单。 –

+0

@IncognitoSkulll:实际上它有超过60多个输入,下拉菜单,收音机,复选框等字段。 – Sky

回答

3

最后,我通过对单个输入字段启用AJAX验证并通过使用isAjax,以便服务器可以处理AJAX验证请求来做到这一点。

以下是代码:

鉴于:

<?= $form->field($model, 'name',['enableAjaxValidation' => true, 'validateOnChange' => false])->textInput(['maxlength' => 255]) ?> 

并在控制器:

if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { 

      $nm= $_POST['BusinessProcessProfile']['name']; 
      $result = Model::find()->select(['name'])->where(['name' => "$nm"])->one(); 
      if ($result) { 
       Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
       return \yii\widgets\ActiveForm::validate($model, 'name'); 
      } else { 
       return false; 
    } 
} 

它自动调用模型中定义的验证规则。

欲了解更多信息,请参阅:http://www.yiiframework.com/doc-2.0/guide-input-validation.html#client-side-validation