2015-11-03 65 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