在依赖和显示字段上的Cakephp验证

时间:2014-02-27 10:14:30

标签: validation cakephp

我已经在这里找到了一些关于我的问题的例子,但出于某种原因,他们在我的具体问题上没有帮助我:

我有一个带有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'填充了任何数据,我可以提交表单,但我没有收到任何验证错误。

我是'图片'的情况我收到了上传错误,但那是因为我现在还没有完成任何上传功能。

总的来说,我认为我的检查案例不起作用,或者我对它有一般性的误解。请仔细看看,我想了解我在这里做错了什么......

2 个答案:

答案 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我使用扩展验证,它可以处理文件。

非常感谢大家,我花了一段时间,但现在就得到了它!