CakePHP模型验证,检查1个字段中可能存在的2个文本

CakePHP模型验证,检查1个字段中可能存在的2个文本,cakephp,cakephp-1.2,Cakephp,Cakephp 1.2,我正在对数据库中的town/city字段使用一些简单的验证。这已应用于模型中。正如您可以看到的,城市和城镇这两个字段都要求最小长度为3个字符,并且不能为空 然而,当人们填写此字段的表格时,他们将拥有一个城镇或城市,而不是两者。如何在验证中创建一个检查,以便只需完成其中的一个字段?显然,我不能对这两个字段都“allowEmpty”=>为真,那么我如何实现这一点呢 验证规则: 'town' => array( 'rule' =>

我正在对数据库中的town/city字段使用一些简单的验证。这已应用于模型中。正如您可以看到的,城市和城镇这两个字段都要求最小长度为3个字符,并且不能为空

然而,当人们填写此字段的表格时,他们将拥有一个城镇或城市,而不是两者。如何在验证中创建一个检查,以便只需完成其中的一个字段?显然,我不能对这两个字段都“allowEmpty”=>为真,那么我如何实现这一点呢

验证规则:

       'town' => array(         
             'rule' => array('minLength', 3),                            
             'allowEmpty' => false,
             'message' => 'Must have town'
          ) ,

                 'city' => array(         
             'rule' => array('minLength', 3),                            
             'allowEmpty' => false,
             'message' => 'Must have city'
          ) ,

有什么建议吗?

您可以在AppModel上创建自定义验证规则,如下所示:

function eitherOr(&$data, $orFields = array()) {
    foreach ($orFields as $orField => $orValue) {
        if (!empty($orValue)) {
            unset($this->validationErrors[key($data)]);
        }
    }
    return true;
}
然后,添加到您的验证规则中

var $validate = array(
  'town' => array(
    'empty' => array(
      'rule' => 'allowEmpty'
    ),
    // other rules
  ),
  'city' => array(
    // other rules
    'eitherOr' => array(
      'rule' => array('eitherOr', array('town'))
    )
  )
);
基本上,它将检查您在第二个参数中传递的字段数组中的值(在本例中,
array('town')
将检查town字段。如果该值不为空,它将删除city上的所有验证错误,从而允许其通过。规则需要最后一个,以便删除验证错误。

请参阅