2014-03-14 36 views
0

我想驗證一個窗體針對Yii keeing ajax驗證的模型。 我想保持我的數據庫中唯一的字段。 我面臨的問題是,阿賈克斯消息沒有得到獨特的驗證器顯示,但對於所有其他規則工作正常。yii獨特的驗證器的Ajax消息

請讓我知道我錯了。 相關代碼下面貼

示範規則

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
     ----------- 
     ------------ 
     array('user_code', 'length', 'max'=>20), 
     array('user_code','unique','message'=>'This code already exists. Please try different code', 'className' => 'User', 
    'attributeName' => 'user_code',), 

    ); 
} 

FORM

<?php $form=$this->beginWidget('CActiveForm', array(
        'id'=>'frm-useraccount', 
        'enableAjaxValidation'=>true, 
        'enableClientValidation'=>true, 
        'action'=>Yii::app()->createUrl('dashboard/index').'#user', 
        'clientOptions'=>array(
          'validateOnSubmit'=>true, 

        ), 
       )); 
       ?> 

CONTROLLER

​​

回答

1

要顯示特定字段的錯誤,您需要在表單中顯示錯誤摘要或錯誤字段。

錯誤摘要

<?php echo $form->errorSummary($model); ?> 

出錯欄中

<?php echo $form->error($model,'user_code'); ?> 

除此之外,你需要設置你的控制器返回AJAX驗證結果

/** 
* Provides output to controller action request "/dashboard/index" 
*/ 
public function actionIndex() { 

    // Prepare login form 
    $model = new User('update'); 

    // Perform AJAX validation if required 
    $this->performAjaxValidation($model, 'frm-useraccount'); 

    // Perform basic validation 
    if ($model->attributes = $req->getPost('User')) { 
     if ($model->validate()) { 

      // Save in DB 
      $model->save(false); 

      // Show confirmation for user 
      Yii::app()->user->setFlash(
       'success', 
       Yii::t(
        'site', 
        'Save successfull.' 
       ) 
      ); 

      // Refresh 
      $this->refresh(); 
     } 
     else { 
      Yii::app()->user->setFlash(
       'error', 
       CHtml::errorSummary($model) 
      ); 
     } 
    } 
} 

/** 
* Creates data validation output for ajax requests with data from given form ID 
*/ 
protected function performAjaxValidation($model, $formId) { 

    /** 
    * @var $app CWebApplication 
    * @var $req CHttpRequest 
    */ 
    $app = Yii::app(); 
    $req = $app->getRequest(); 

    if ($req->getIsAjaxRequest() && $req->getPost('ajax') === $formId) { 
     echo CActiveForm::validate($model); 
     $app->end(); 
    } 
} 

除了你模型和規則,這應該是足夠的,以顯示您需要的錯誤。

0

他說的^^^。根據Deele的說法,您正在創建一個新的對象,而無需賦予它任何值。 $objMdl->validate($postedData['user_code']);表示驗證模型objMdl的屬性$ postingData ['user_code']。它並不意味着驗證屬性user_code,而是隨機插入$ postingData ['user_code']中的任何東西。