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


Zend Framework 2 - Wrapped form elements cause validation to fail

我正在使用一个包含包装元素的表单。像这里描述的那样,在视图中进行包装。

我的动作看起来像这样:

 $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,但不管有没有,它都不起作用。

知道我可能做错了什么吗?表单定义不变,适用于未包装的表单。所以我猜错误不在这里。

注:: $myForm->isValid()的回显返回一个空字符串。有没有办法得到错误信息?表单字段将用我输入的数据填充,并且不会显示任何错误。

使用以下语句:

$form->getMessages()

将给你验证消息。

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

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

你可以尝试添加行到你的代码,因为我可以看到在zend的Form.php,元素名称没有包装'entity'直到你调用prepare();

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

但我不相信它会有帮助,因为你描述的行为看起来没有什么不同。

你能给我们展示更多的Entity和var_dumps的源代码吗?

在ZF2中,如果表单无效,则不绑定数据。在isValid的返回值中看到空字符串的原因是返回类型是布尔值,请使用var_dump代替。