2012-05-01 3 views
0

Я использую некоторые простые проверки в своих полях города/города в моей базе данных. Это было применено в моделях. Поскольку вы можете видеть оба поля, город и город, требуется минимальная длина 3 символа и не может быть пустым.CakePHP Model Validation, check 1 поле возможного 2 есть текст присутствует

Однако, когда люди заполняют форму для этого поля, у них будет город или город, а не оба. Как создать проверку проверки, чтобы только 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' 
     ) , 

Любые предложения?

+0

см. [этот пост] (http://stackoverflow.com/questions/9719033/validation-for-at-least -он-телефон-номер-в-необходимости-в-CakePHP) – Ross

ответ

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') бы проверить поле города. Если значение не является пустым, он будет удалять любые проверки ошибки в городе и, следовательно, позволяют ему проходить. Правило должно длиться так, чтобы ошибки проверки были удалены.

 Смежные вопросы

  • Нет связанных вопросов^_^