Zend Framework 2 - 包装的表单元素导致验证失败

时间:2013-04-02 08:09:13

标签: php forms annotations zend-framework2

我正在使用包含包装元素的表单。包装发生在视图中,如here所述。

我的行动如下:

 $myForm = [definition here]
 $myForm->setName('entity');
 $myForm->setWrapElements(true);

 $request = $this->getRequest();
 if ($request->isPost()) {

        $myEntity = new Entity();
        $myForm->bind($myEntity);
        $myForm->setData($request->getPost()->get('entity'));

问题:调用$myForm->isValid()时,它无效。之后调用$myForm->getData()时它是空的。

我在动作中重复了setNamesetWrapElements,但无论有没有,它都不起作用。

任何想法我可能做错了什么?表单定义不受影响,适用于非包装表单。所以我猜错误不在那里。

P.S。: $myForm->isValid()的回显返回一个空字符串。有没有办法得到错误信息?表单字段填充了我放在那里的数据,并没有显示任何错误。

3 个答案:

答案 0 :(得分:1)

使用以下内容:

$form->getMessages()

会给你验证信息。

您可以转储内容或在foreach循环中循环消息。例如:

foreach($form->getMessages() as $msgId => $msg) {
    echo "Validation error: $msgId => $msg"
}

答案 1 :(得分:0)

你可以尝试在你的代码中添加一行,正如我在zend的Form.php中看到的那样,在你调用prepare()之前,元素名称不包含在'entity'中;

$myForm->setName('entity');
$myForm->setWrapElements(true);
$myForm->prepare(); // << add this

但我不相信它会有所帮助,因为你描述的行为看起来有点不同。谨您向我们展示了更多Andin和新浪想要的实体和var_dumps的源代码。

答案 2 :(得分:0)

在ZF2中,如果表单无效,则数据不会绑定。之所以会在isValid返回中看到一个空字符串是因为返回类型是一个布尔值,而是使用var_dump。