Cake PHP验证(+ preg_match() - 警告)

时间:2011-10-08 16:13:17

标签: php cakephp

使用cakephp 2.0 rc3。

在我的模型中验证后:

var $validate = array(
        'loginname' => array(
            'minCharactersRule' => array(
                'rule' => array('minLength', 3),
            ),
            'alphaNumericRule' => array(
                'rule' => 'alphaNumeric',
            ),
            'uniqueRule' => array(
                'rule' => 'isUnique',
            ),
            'on' => 'create',
            'required' => true,
            'allowEmpty' => false,
        ),

        'password' => array(
            'minCharactersRule' => array(
                'rule' => array('minLength', 5),
            ),
            'required' => true,
            'allowEmpty' => false,
        ),

        'email' => array(
            'emailRule' => array(
                'rule' => array('email'),
            ),
            'uniqueRule' => array(
                'rule' => 'isUnique',
            ),
            'required' => true,
            'allowEmtpy' => false,
        ),

        'display_name' => array(
            'betweenRule' => array(
                'rule' => array('between', 3, 20),
            ),
            'uniqueRule' => array(
                'rule' => 'isUnique',
            ),
            'required' => true,
            'allowEmpty' => false,
        ),

        'registered' => array(
            'rule' => array('date', 'ymd'),
            'required' => false,
            'allowEmpty' => false,
            'on' => 'create'
        ),

        'status' => array(
            'rule' => 'numeric',
            'required' => false,
            'allowEmpty' => false,
            'on' => 'create'
        ),
    );

当我填写每个字段并提交我收到“必填”错误消息时... debug($ this-> Model-> validationErrors)说:

Array(
[loginname] => Array
    (
        [0] => required
    )

[password] => Array
    (
        [0] => required
    )

[email] => Array
    (
        [0] => required
    )

[display_name] => Array
    (
        [0] => required
    ))

此外还出现了一些丑陋的警告:

Warning (2): preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash [CORE/Cake/Model/Model.php, line 2981]

(4次)

当我第一次看到它时,我以为我错误地输入了任何内容,但在检查3-4次并得到相同的错误后,我决定来这里问:x 我错过了什么吗?耗尽了想法......

nahri

2 个答案:

答案 0 :(得分:0)

再次阅读食谱示例后,我找到了解决方案。

每条规则都必须包含required,allowEmpty等参数,而不是字段本身。

这对我来说没有任何意义,但这就是手册中的描述以及它是如何工作的。

答案 1 :(得分:-1)

required => true与验证规则notEmpty()的含义不同。 required => true表示必须存在数组键 - 这并不意味着它必须具有值。因此,如果数据集中不存在该字段,则验证将失败,但如果提交的值为空(''),则可能(取决于规则)成功。

因此,在您的情况下,您可以注释掉所有required => true,并且一切都应该没问题。