2013-02-09 47 views
0

我正在通过锂PHP框架构建一个非常复杂和动态的表单。锂电PHP框架高级验证

我已经得到了表格工作,并保存到MongoDB与小问题。但我在验证时遇到问题。

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

例如,我有一个表单,用户可以输入一个问题,然后为此问题输入无限数量的可能答案。列出了每个答案的字段ID,例如“answer_1”,“answer_2”,“answer_3”等。用户可以添加无限数量的答案。这发生在一些花哨的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”对象添加到Validator函数中,我想我可以使这个工作。

在此先感谢您的帮助

回答

2

看看里面有什么$options。你应该在那里有一个'值'键,它具有表单中的所有值。

所以尽量 $_data = $options['values'];

+0

谢谢marscher!这工作。数据字符串中的子文档有一个小问题。例如,在我的主文档中,我有一个子文档(我正在使用MongoDB)。该子文件被称为“答案”。所以我认为我可以通过像'$ options ['values'] ['answers']这样的东西来拉出数值;'但是,结果实际上回来了,就像'“answers.0.answer_type”' - 这不是我预计,但我想出了一个方法来处理它。再次感谢你的帮助 – NinoCodes 2013-02-10 00:07:48