0

我在数据库中的城镇/城市字段上使用了一些简单的验证。这已应用于模型中。如您所见,city 和 town 这两个字段至少需要 3 个字符且不能为空。

但是,当人们填写此字段的表格时,他们将拥有一个城镇或城市,而不是两者兼而有之。如何在验证中创建一个检查,以便只需要完成这些字段中的 1 个?我显然不能 'allowEmpty' => true 两个字段,所以我该如何实现呢?

验证规则:

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

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

有什么建议么?

4

1 回答 1

1

您可以在 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 上的任何验证错误,因此允许它通过。该规则需要放在最后,以便消除验证错误。

于 2012-05-01T14:37:01.943 回答