2017-03-04 54 views
0

所以我有一個非常基本的OOP表單驗證器類。但我很難實現max_length和min_length規則。我的規則像這樣rule1 | rule2等工作,所以|規則之間分開。我試圖做到這一點| max_length,60 | min_length,10。 `OOP表單驗證器實現長度規則

public function validate($field,$value,$rules) 
    { 
    $field = ucfirst($field); 
    $rules = explode('|',$rules); 
    foreach($rules as $rule) 
    { 
     switch($rule) 
     { 
      case 'required': 
       $this->shouldBeRequired($field, $value); 
       break; 
      case 'string': 
       $this->shouldBeString($field,$value); 
       break; 
      case 'email': 
       $this->shouldBeEmail($field, $value); 
       break; 
      case 'number': 
       $this->shouldBeNumber($field,$value); 
      default: 
       throw new ErrorException("$rule doesn't exist"); 
     } 
    } 
    }` 

,我不知道如何添加MAX_LENGTH和MIN_LENGTH情況下

回答

2

拆分您的規則到其份,分離:

public function validate($field,$value,$rules) 
{ 
    $field = ucfirst($field); 
    $rules = explode('|',$rules); 
    foreach($rules as $rule) 
    { 

     $ruleParts = explode(",", $rule); 
     switch($ruleParts[0]) 
     { 
      case 'required': 
       $this->shouldBeRequired($field, $value); 
       break; 
      case 'string': 
       $this->shouldBeString($field,$value); 
       break; 
      case 'email': 
       $this->shouldBeEmail($field, $value); 
       break; 
      case 'number': 
       $this->shouldBeNumber($field,$value); 
       break; // You forgot this one! 
      case 'min-length': 
       if (isset($ruleParts[1]) && is_numeric($ruleParts[1])) 
        $this->restrictMinLength($ruleParts[1]); 
       else 
        //Parameter forgotten or invalid 
       break; 
      default: 
       throw new ErrorException("$rule doesn't exist"); 
     } 
    } 
    } 

對於最大長度,它是相同的。

順便說一句,你忘了一個break如圖評論直列

+0

它完美的作品十分感謝。 –

+0

將使用最小長度,3 |最大長度,50?我的意思是我們只有$ ruleParts [1]。 –

+1

每個規則被分成它自己的數組:'ruleParts [0]'是規則名,'ruleParts [1]'是每個規則的第一個參數,所以是的,它會工作。您現在甚至可以爲每個規則使用多於1個參數,例如'size,2,6'。 'ruleParts [0]'是'size','ruleParts [1]'是'2','ruleParts [2]'是'6', – Psi

1

通知,應實現新的兩個功能:shouldBeLessThanshouldBeGreaterThan

public function validate($field,$value,$rules) 
{ 
    $field = ucfirst($field); 
    $rules = explode('|',$rules); 
    foreach($rules as $rule) 
    { 
     $rule = explode(',', $rule); 
     switch($rule[0]) 
     { 
      case 'required': 
       $this->shouldBeRequired($field, $value); 
       break; 
      case 'string': 
       $this->shouldBeString($field,$value); 
       break; 
      case 'email': 
       $this->shouldBeEmail($field, $value); 
       break; 
      case 'number': 
       $this->shouldBeNumber($field,$value); 
       break; 
      case 'max_length': 
       $this->shouldBeLessThan($field, $value, $rule[1]); 
       break; 
      case 'min_length': 
       $this->shouldBeGreaterThan($field, $value, $rule[1]); 
       break; 
      default: 
       throw new ErrorException("$rule doesn't exist"); 
     } 
    } 
}