1

我正在尝试在 zend 框架 2 中构建多个表表单。我通过使用 HTML 输入数组分隔字段开发了一个表单,例如,属于表“页面”的一个字段看起来像

$this->add(array(
            'name' => 'pages[title]',
            'attributes' => array(
                'type' => 'text',
                'id' => 'title'
            ),
            'options' => array(
                'label' => 'Title',
            ),
        ));

但它的过滤器是

$inputFilter->add($factory->createInput(array(
                        'name' => 'title',
                        'required' => true,
                        'filters' => array(
                            array('name' => 'StripTags'),
                            array('name' => 'StringTrim'),
                        ),
                        'validators' => array(
                            array(
                                'name' => 'NotEmpty',
                            ),
                        ),
            )));

更改名称背后的原因是我通过在我的控制器中相应地分配值来逐步验证字段,如下所示

$form->setData($this->request->getPost()->pages);

获取消息数组时出现问题。表单 isValid() 函数工作正常,但如果输入无效,它会返回空的消息数组。我怎样才能得到消息?


深入挖掘后,我发现过滤器正在返回消息,但是当表单通过过滤器和元素的名称映射错误消息时,由于我使用不同的名称,它无法映射......不可以解决这个问题

在您要求我为表单元素和过滤器分配相同的名称之前,它将不起作用,因为表单无法将数据分配给具有 pages[title] 的元素,因为在请求中它不会收到任何带有名称 pages[ title] 而不是它将接收页面数组

4

1 回答 1

1

我会采取另一种方法,保持你的名字简单,而不添加数组名称表示法。

然后您可以使用验证组和字段集来验证不同的步骤。

http://framework.zend.com/manual/2.0/en/modules/zend.form.quick-start.html#validation-groups

如果您可以提供有关您要实现的目标的更多详细信息,那么回复将更容易。

于 2013-05-13T14:00:05.033 回答