yii唯一验证器的Ajax消息

时间:2014-03-14 08:03:12

标签: php ajax validation yii

我正在尝试在Yii keeing ajax验证中验证模型。 我想在我的数据库中保留一个唯一的字段。 我面临的问题是没有为唯一验证器显示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

$objMdl                   = new User;
      $isUserSetUpFormSubmitted     = (isset($postedData['User']))?true:false;
      // handle form submit
      if($isUserSetUpFormSubmitted)
      {
         //validate the model 
          $isMdlValidated = $objMdl->validate($postedData['user_code']);
          if($isMdlValidated)
          {
            //handle insert
          }
          else
         {
            //display model errors
          }
      }

2 个答案:

答案 0 :(得分: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();
    }
}

除了您的模型和规则之外,这应该足以显示您需要的错误。

答案 1 :(得分:0)

他说的是什么^^^。除了Deele所说的,你正在创建一个新的对象,而不会赋予它任何价值。 $objMdl->validate($postedData['user_code']);表示验证模型objMdl的属性$ postingData [&#39; user_code&#39;]。这并不意味着验证属性user_code,而是在$ postingData [&#39; user_code&#39;]中插入任何随机内容。