【问题标题】:CakePHP Model Validation, check 1 field of a possible 2 has text presentCakePHP 模型验证,检查可能 2 的 1 字段是否存在文本
【发布时间】:2012-05-01 14:29:50
【问题描述】:

我在我的数据库中的城镇/城市字段上使用了一些简单的验证。这已应用于模型中。如您所见,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'
          ) ,

有什么建议吗?

【问题讨论】:

标签: cakephp cakephp-1.2


【解决方案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') 将检查城镇字段。如果该值不为空,它将删除任何验证错误城市,因此允许它通过。规则需要放在最后,这样才能消除验证错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多