0

我正在通过 Lithium PHP 框架构建一个非常复杂和动态的表单。

我已经让表单正常工作并保存到 MongoDB 中没有什么问题。但我在验证方面遇到了麻烦。

简单的验证(例如检查字段是否为空或数字)工作正常。但是我必须做一些复杂的验证,这些验证依赖于表单中的许多字段。

例如,我有一个表单,用户可以在其中输入一个问题,然后为这个问题输入无限数量的可能答案。列出每个答案的字段 ID,例如“answer_1”、“answer_2”、“answer_3”等。用户可以添加无限数量的答案。这是通过一些花哨的 JavaScript 来实现的,这些 JavaScript 在客户端向表单中插入额外的元素。

在验证级别,我想确保添加的每个答案都不为空。

我想使用 Lithium 中内置的“传统”验证器功能来做到这一点。我也在模型级别执行此操作,而不是控制器级别(注意- 我有一个解决方法可以在控制器级别解决这个问题,但宁愿在模型中以“正确”的方式进行)

据我所知,问题在于您只能将单个值传递给验证器规则。我只需要将表单中的所有值传回验证器。如果我能做到这一点,我会是黄金。我想要做的伪代码如下所示:

        Validator::add('CorrectTest', function(&$value, $format = null, array $options = array()) {

        foreach ($_data as $key => $value) {
            if (stristr($key, "answer_")) {
                if ($value == "") {
                    return false;           
                }
            }
        }   

        return true;
    });

此代码不起作用,因为 $_data 值不存在。如果我能想出一种方法将一个完全填充的“$_data”对象放入验证器函数中,我想我可以让它工作。

在此先感谢您的帮助

4

1 回答 1

2

看看里面有什么$options。您应该在其中有一个“值”键,其中包含表单中的所有值。

所以试试 $_data = $options['values'];

于 2013-02-09T02:57:46.123 回答