我有这个名为模板名称的表单字段,我必须在我的cakephp驱动的应用程序中使用验证器addMethod函数检查其唯一性。我无法理解这是如何工作的以及如果名称不唯一它将如何验证它。它正在停止表单提交,如果名称是唯一的。下面是我的代码。请帮助我,并尝试纠正我的错误。
客户端代码
function validatefrm() {
var validate_frm = $("#EmailTemplateEditForm").validate({
onkeyup: false,
rules: {
"data[EmailTemplate][template_name]": {
required:true,
validateTemplatename:true
},
},
messages: {
"data[EmailTemplate][template_name]": {
required:"<br/>Please Enter Template name !",
},
}
});
jQuery.validator.addMethod("validateTemplatename",function (value,elememt){
var inputElem = $('#EmailTemplateEditForm :input[name="data[EmailTemplate][template_name]"]'),
data = { "template_name" : inputElem.val() },
eReport = '';
$.ajax(
{
type: "POST",
url: "<?php echo HTTP_ROOT.'email_templates/check_unique/'?>",
dataType: "json",
data: data,
success: function(data) {
if (data !== 'true'){
return false;
}
else{
return true;
}
},
error: function(xhr, textStatus, errorThrown) {
alert('ajax loading error... ... ');
return false;
}
});
}, '');
控制器中的服务器端编码
function check_unique(){
if (isset($this->params['form']['template_name']) && !empty($this->params['form']['template_name'])){
$template_name = trim($this->params['form']['template_name']);
$totaltemplates = $this->EmailTemplate->find('count', array('conditions'=>array('EmailTemplate.template_name' => $template_name)));
if($totaltemplates == 0) {
echo(json_encode(true)); //Name is Unique
exit;
}
else{
echo(json_encode(false)); //Name already exists
exit;
}
}
else{
echo "false"; //invalid post var
}
}
}