我正在通过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函数中,我想我可以让它工作。
提前感谢您的帮助
答案 0 :(得分:2)
看看$options
内的内容。你应该有一个'值'键,其中包含表格中的所有值。
所以试试
$_data = $options['values'];