2014-09-25 34 views
0

我試圖找出一種方法來循環通過驗證方法返回true或false的對象,然後最終知道是否有任何對象返回false。循環驗證檢查,如果其中一個檢查返回false,則返回false。

$validate_form = true; 

    //Loop through groups 
    foreach ($this->field_groups as $field_group) { 


     //Loop through fields 
     foreach ($field_group->fields as $field) { 


      $validated = $field->validate($data[$field->name]); 
      //if any of these returned false, set $validate_form to false 

     } 

    } 

    return $validate_form; 

但我根本無法說唱我的腦袋周圍如何實現這一目標。我想過使用一個數組,然後檢查數組中的任何值是否有'false'。但這似乎有點笨拙。

我覺得必須有一個「最佳實踐」如何做到這一點?

更新:其重要的是每個字段運行->validate()方法。甚至是第一個「假」之後的字段。

謝謝!

+0

那麼,您在問題中編寫的* exact *代碼有什麼問題?這似乎正是你需要的。 – Sammitch 2014-09-25 16:49:35

+0

爲什麼所有驗證方法都運行? – Hammerstein 2014-09-25 16:57:03

+0

@Sammitch:我的代碼永遠不會返回false,因爲這從來沒有設置。另外,如果我確實使用該方法返回$ validate_form的值,那麼結果將只是最後一個方法返回的結果 – 2014-09-25 17:32:28

回答

0

你可以用這個去:

$validate_form = true; 

//Loop through groups 
foreach ($this->field_groups as $field_group) { 


    //Loop through fields 
    foreach ($field_group->fields as $field) { 


     $validated = $field->validate($data[$field->name]); 
     //if any of these returned false, set $validate_form to false 
     if (!$validated) 
     { 
      $validate_form = false; 
      break; 
     } 
    } 

} 

return $val_form; 

的 「突破」;將停止循環。

+0

雖然我確實需要所有字段來運行驗證方法。 – 2014-09-25 16:44:51

+0

那麼你可以將每個驗證的結果保存在一個數組中,循環遍歷整個數組並檢查是否有值爲「false」。 – AntoineB 2014-09-25 16:48:05

+0

是的 - 這也是我在這個問題中提出的解決方案 - 但是這樣做不覺得有點笨拙嗎? – 2014-09-25 16:49:18