我已经在这里找到了一些关于我的问题的例子,但出于某种原因,他们在我的具体问题上没有帮助我:
我有一个带有id为'type'且id为1,2,3的表单。 根据所选的值,我使用jquery附加字段显示/隐藏。
在选项1上,仅验证字段'question'并忽略'picture'和'answervalue' 在选项2上,我需要选择一个“图片”进行上传,但忽略'answervalue' 在选项3上有“answervalue”字段,该字段不应为空并忽略“picture”
var $validate = array(
'question' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => '{question} empty',
),
),
'answervalue' => array(
'rule' => array('checkCase', 'type'),
'message' => '{answervalue} empty'
),
'picture' => array(
'picturecase' => array(
'rule' => array('checkCase', 'type'),
'message' => '{picture} empty'
),
'uploadError' => array(
'rule' => 'uploadError',
'message' => '{picture} uploadError'
)
)
);
function checkCase($data, $type) {
if($type == 1) {
return true;
}
if($type == 2 && empty($this->data[$this->alias]['picture'])) {
return false;
}
if($type == 3 && empty($this->data[$this->alias]['answervalue'])) {
return false;
}
return true;
}
在我的add.ctp中,我将所有3个字段视为“必需”(只要我禁用jquery如何/隐藏)。
我无法继续发送表单,只要我没有填写'answervalue'任何数据。 Id'answervalue'和'question'填充了任何数据,我可以提交表单,但我没有收到任何验证错误。
我是'图片'的情况我收到了上传错误,但那是因为我现在还没有完成任何上传功能。
总的来说,我认为我的检查案例不起作用,或者我对它有一般性的误解。请仔细看看,我想了解我在这里做错了什么......
答案 0 :(得分:0)
如果您从$validate
移除验证并更改验证规则dinamically,具体取决于type
选择中选择的内容,该怎么办?
函数checkCase
可以执行类似
$this->validator()->add('question', 'required', array(
'rule' => 'notEmpty'
));
答案 1 :(得分:0)
最后我开始工作了。 我从$ validate
中删除了字段var $validate = array(
'question' => array(
'notEmpty' => array(
'rule' => 'notEmpty',
'message' => '{question} empty',
),
'unique' => array(
'rule' => 'isUnique',
'required' => 'create',
'message' => '{question} exists',
),
)
);
我删除了checkCase函数。 我添加了
function beforeValidate(){
$type = $this->data[$this->alias]['type'];
if($type == 3) {
$this->validator()
->add('answervalue', 'required', array(
'rule' => 'notEmpty',
'message' => '{answervalue} empty',
'required' => 'create'
))
->add('answervalue', 'numeric', array(
'rule' => 'numeric',
'message' => '{answervalue} not numeric',
'required' => 'create'
));
}
if($type == 2) {
$this->validator()
->add('picture', 'extension', array(
'rule' => array('extension', array('jpg', 'png')),
'message' => '{picture} extension',
'required' => 'create'
))
->add('picture', 'uploadfile', array(
'rule' => array('uploadFile'),
'message' => '{picture} upload error1',
'required' => 'create'
))
->add('picture', 'uploadError', array(
'rule' => 'uploadError',
'message' => '{picture} upload error2',
'required' => 'create'
));
}
此链接:http://www.foldifoldi.com/?p=147帮助了我很多。而不是notEmpty我使用扩展验证,它可以处理文件。
非常感谢大家,我花了一段时间,但现在就得到了它!