2015-02-18 3 views
0

У меня есть следующий метод проверки в моем Validation Класс:Ошибка при валидации кода

public function validate($data, $rules) 
{ 
    if(!is_array($rules)) 
    { 
     $rules = array($rules); 
    } 
    foreach($rules as $rule) 
    { 
     if(is_array($rule)) 
     { 
      if(!$this->{$rule[0]}($data, $rule[1])) 
      { 
       array_push($this->errors, $rule[0] . ' is ' . $rule[1]); 
       $ruleValue = $rule[0]; 
       print_r($this->errorMessages[$ruleValue] . BR); 
       return $this->errors; 
      } 
     } 
     else 
     { 
      if(!$this->{$rule}($data)) 
      { 
       array_push($this->errors, $rule); 
       print_r($this->errorMessages[$rule] . BR); 
       return $this->errors; 
      } 
     }  
    } 
    if(empty($this->errors)) 
    { 
     return TRUE; 
    } 
} 

с методом, который проверяет действительную дату (то есть меньше, чем текущая дата)

private function validDate($data) 
{ 
    $now = date('Ymd'); 
    return ($data < $now) ? TRUE : FALSE; 
} 

I имеет другой файл php, который создает этот класс проверки, а затем проверяет его на ввод и проверяет его:

if 
      (
       $Validation->validate($email, array('required', 'isEmail')) && 
       $Validation->validate($password, array('required', array('min_length', '6'), array('max_length', '20'))) && 
       $Validation->validate($repeatPassword, array('required', array('min_length', '6'), array('max_length', '20'), array('matches', Input::fetch('password')))) && 
       $Validation->validate($date, array('required', 'validDate')) 
      ) 
{ 
    echo 'Yes'; 
} 

, в идеале, эхо-код должен выполняться, когда все проверки являются истинными, и он работал нормально, прежде чем я внес изменения в действительный метод Date в классе Validation.

Он печатает ошибку, что означает, что она возвращает false, но также отображается сообщение «Да».

Я использовал && в инструкции if, что означает, что если какое-либо условие является ложным, код не будет выполнен, но я не могу понять, почему он работает, когда все условия возвращают false.

ответ

0

Вы возвращаетесь

return $this->errors; 

в вашей валидации функции. Но это определенно не false или 0, так что это true, и оно проходит через ваше состояние. Вы Шоуда вернуть ложные

+0

Работал нормально! Таким образом, если первое условие ложно, на экране отображается сообщение об ошибке только с первого. Есть ли способ заставить его вернуть все сообщения об ошибках из всех проверок? –

+0

Вы можете сохранить их результаты в переменной и проверить эту переменную (ы) после завершения последней проверки. – Peky

+0

Что-то вроде: '$ Рез = $ Validation-> Validate();' '$ Рез = $ Validation-> Validate() & & $res;' И условие в конце – Peky

0

Метод validate всегда возвращает что-то другое ложно, поэтому выражение if всегда верно. Таким образом, вы получите ошибку, а также вывод «Да». Я предлагаю вам заставить метод возвращать true или false в соответствии с проверкой и устанавливать ошибки как общедоступный атрибут, чтобы вы могли читать их в случае ложной проверки.

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