【问题标题】:Custom validation rule in CakePHP not working as intendedCakePHP 中的自定义验证规则未按预期工作
【发布时间】:2011-12-06 15:07:23
【问题描述】:

我在我的提交模型中编写了一个自定义验证方法,它基本上允许一个空白输入字段,但是一旦有人在其中输入内容,它就会验证输入的数据。

我的提交模型中的验证看起来像这样(所有其他验证规则都在工作,除了“描述”):

    var $validate = array(
    'title' => array(
        'title' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Please enter a title'
        ),
        'minLength' => array(
            'rule' => array('minLength', 5),
            'message' => 'Please make your title longer'
        ),
        'maxLength' => array(
            'rule' => array('maxLength', 300),
            'message' => 'Your title needs to be shorter'
        ),
    ),
    'description' => array(
        'checkDescription' => array(
            'rule' => array('validateDescription'),
            'message' => 'Description must be greater than 5 characters'
        ),
    ),
    'source' => array(
        'source' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Enter a valid source URL'
        ),
        'website' => array(
            'rule' => 'url',
            'message' => 'Please enter a valid source URL'
        ),
    )
);

我的方法也在我的提交模型中(在上面的代码下方)是:

    public function validateDescription($data) {
    if(empty($data['Submission']['description']))
        return true;

    if((strlen($data['Submission']['description'])) <= 5)
        return false;
}

我不确定为什么这根本不起作用。在我看来,我有这个来显示错误:

    if ($form->isFieldError('Submission.description'))
    echo ($form->error('Submission.description', null, array('class' => 'error')));

我尝试这样做的唯一原因是因为使用required =&gt; falseallowEmpty =&gt; true 的正常验证以及minLengthmaxLength 验证规则的行为不符合我的预期。

任何帮助将不胜感激! :)

【问题讨论】:

    标签: php validation cakephp model cakephp-1.3


    【解决方案1】:

    传递给验证方法的$data 变量仅包含array($fieldname =&gt; $value)。对于长度超过 5 的字符串,您也不会返回 true。您的方法应如下所示:

    public function validateDescription(array $data) {
        $value = current($data);
        return !$value || strlen($value) > 5;
    }
    

    【讨论】:

    • 做到了。谢谢!如果我要添加另一个验证规则,你会如何建议我将自定义“消息”发送回 $validate 属性中的“描述”数组?我正在考虑可能做 3 个条件并更改 $message = 'needs to be greater than 5 characters' 或 $message = 'needs to be less than 10k chars' 并返回。
    • 我要么将其合并为一条消息(“需要在 x 和 y 之间”),要么将其设置为单独的规则,每个规则都有自己的消息。
    • 另请注意,您缺少关键的“最后”=>真实部分
    猜你喜欢
    • 2014-07-15
    • 2020-01-05
    • 2011-08-16
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2011-04-29
    • 2018-08-12
    • 1970-01-01
    相关资源
    最近更新 更多