2011-10-08 93 views
0

使用cakephp 2.0 rc3。CakePHP验证(+ preg_match() - 警告)

按照我的模型验证:

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' 
     ), 
    ); 

当我填写各个领域,并提交即时得到“需要”的错误消息... 调试($这个 - >型号 - > 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

回答

0

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

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

这是没有意义的我,但多数民众赞成它是如何在手册中描述以及它是如何工作..

-1

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

所以在你的情况下,你可以注释掉所有的required => true,所有应该没问题。

+0

我知道notEmpty之间的差异,需要和字段在请求数据,我测试了一下。 它必须是别的东西(preg_match()的警告原因?) – nahri

+0

我同意不管什么“必需”设置为shoudnt是任何警告。 – mark