我正在使用包含包装元素的表单。包装发生在视图中,如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()
时它是空的。
我在动作中重复了setName
和setWrapElements
,但无论有没有,它都不起作用。
任何想法我可能做错了什么?表单定义不受影响,适用于非包装表单。所以我猜错误不在那里。
P.S。: $myForm->isValid()
的回显返回一个空字符串。有没有办法得到错误信息?表单字段填充了我放在那里的数据,并没有显示任何错误。
答案 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。