验证规则notEmpty和requirePresence

时间:2015-04-14 09:15:02

标签: cakephp-3.0

我想知道各种验证规则如何相互影响以及它们如何分层。

我认为最简单的方法是举几个例子。

我们假设我们正在为博客提交帖子。因此,我们将在PostsTable

中进行验证
->notEmpty('title')
->requirePresence('title')
->add('title', 'length', [
    'rule' => ['minLength', 5],
    'message' => 'Must be longer than 5 characers'
]);

->notEmpty('download_speed')
->add('download_speed', 'rule', ['rule' => 'numeric'])
->requirePresence('download_speed')

因此,在此示例中,实际需要notEmpty()requirePresence()规则,因为minLength将强制执行并且不会为空,因为显然空字符串少于5个字符?

类似地,在第二个示例中,空值不是数字,因此规则会反过来强制它出现。

2 个答案:

答案 0 :(得分:4)

requirePresence是当给定字段不存在时触发的唯一内置规则,所有其他规则仅在字段实际存在时应用,即minLength将如果title字段不存在,则不触发。因此,如果您需要一个字段存在并进行验证,那么您将需要requirePresence规则。

空格也会满足minLength,所以如果你不认为5个空格是有效的标题,那么你也不能放弃notEmpty规则(尽管你可能想要交换两个,{ {1}}和notEmpty用于自定义规则,而不是首先修剪标题,因此4个空格后跟一个字符不会使其超过验证,或者您可以修剪实体中的数据。) / p>

您示例中可能不需要的唯一规则是minLength字段的notEmpty规则,因为正如您已经想到的那样,空值不是有效数字。

答案 1 :(得分:0)

// Check:  != ''
    ->notEmpty('title')

// Check:  isset()
    ->requirePresence('title')

// Check:  5 characters at least but can be white spaces 
    ->add('title', 'length', [
         'rule' => ['minLength', 5],
          'message' => 'Must be at least 5 characters in length'
     ]);

// Check:  5 characters without white spaces behind or after
     ->add('title', 'custom', [
         'rule' => function ($currentData) {                        
              $realLenght = strlen(trim($currentData));  
               if ($realLenght >= 5 ) {return true;}
               return false;                  
          },                                    
         'message' => 'Must be at least 5 characters in length. Avoid unnecessary white spaces''
    ]);