我正在使用一个包含包装元素的表单。像这里描述的那样,在视图中进行包装。
我的动作看起来像这样:
$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()
之后,它是空的。
我在动作中重复了setName
和setWrapElements
,但不管有没有,它都不起作用。
知道我可能做错了什么吗?表单定义不变,适用于未包装的表单。所以我猜错误不在这里。
注:: $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
但我不相信它会有帮助,因为你描述的行为看起来没有什么不同。
在ZF2中,如果表单无效,则不绑定数据。在isValid的返回值中看到空字符串的原因是返回类型是布尔值,请使用var_dump代替。