【问题标题】:Looping through validation checks, and return false if one of the checks returns false?循环通过验证检查,如果其中一项检查返回假,则返回假?
【发布时间】:2014-11-20 12:50:08
【问题描述】:

我试图找出一种方法来循环使用返回 true 或 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() 方法很重要。即使是第一个“false”之后的字段。

谢谢!

【问题讨论】:

  • 那么,您在问题中编写的 exact 代码有什么问题?这似乎正是您所需要的。
  • 为什么所有验证方法都运行很重要?
  • @Sammitch :我的代码永远不会返回 false,因为从未设置过。此外,如果我确实使用该方法返回 $validate_form 的值,那么结果将只是最后一个方法返回的值
  • @Hammerstein :因为该方法在运行时设置了一些属性(错误消息)。这些稍后在脚本中使用。但如果我不对所有这些都运行该方法,那么其中一些错误将不会被设置。

标签: php loops methods boolean


【解决方案1】:

你可以这样做:

$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;

“休息;”将停止循环。

【讨论】:

  • 我确实需要所有字段来运行验证方法。
  • 那么您可以将每个验证的结果保存在一个数组中,然后在您的循环遍历整个数组并检查是否有任何值为“false”。
  • 是的 - 这也是我在问题中建议的解决方案 - 但这不会让人觉得有点笨拙吗?
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多