使用Lithium PHP Framework进行高级验证

时间:2013-02-09 00:54:18

标签: validation lithium

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

我已经将表单工作并保存到MongoDB,几乎没有问题。但我在验证方面遇到了麻烦。

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

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

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

我想使用Lithium中内置的“传统”Validator功能来实现这一目标。我也是在模型级别,而不是控制器级别( note - 我有一个解决方法在Controller级别解决这个问题,但宁愿在模型中以“正确”方式执行此操作)

据我所知,问题是你只能将一个值传递给验证器规则。我只需要将表单中的所有值传递给验证器。如果我能做到这一点,我会是金色的。我想要做的伪代码看起来像这样:

        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”对象放入Validator函数中,我想我可以让它工作。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

看看$options内的内容。你应该有一个'值'键,其中包含表格中的所有值。

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