我正在尝试在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
}
}
答案 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;]中插入任何随机内容。