zf2,表单集合没有在zf2中创建正确的输入名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zf2,表单集合没有在zf2中创建正确的输入名称相关的知识,希望对你有一定的参考价值。

我正在尝试创建,用于颜色输入字段的html集合..这将使用javascript动态添加

我的ColorFieldset代码是

namespace DashboardForm;

use ZendFormFieldset;
use ZendInputFilterInputFilterProviderInterface;

class ColorFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct()
    {

        parent::__construct('color');

        $this->add(array(
            'name' => 'hash',
            'options' => array(
                'label' => 'Color'
            ),
            'attributes' => array(
                'required' => 'required',
                'class'   => 'input-mini'
            )
        ));
    }

    /**
     * @return array
     */
    public function getInputFilterSpecification()
    {
        return array(
            'hash' => array(
                'required' => true,
            )
        );
    }
}

并将其添加到表单中

$this->add(array(
    'type' => 'ZendFormElementCollection',
    'name' => 'colors',
    'options' => array(
        'count' => 2 ,
        'should_create_template' => true,
        'allow_add' => true,
        'target_element' => array(
            'type' => 'DashboardFormColorFieldset'
        )
    )
));

并在我的视图文件.. colors.phtml

<div id="colors_container" class="">
     <?php  echo $this->formCollection( $form->get('colors')); ?>
</div>

它的打印输出就像

<div class="" id="colors_container">

   <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="hash"></label>

   <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="hash"></label>

   <span data-template='<label><span>Color</span><input name="hash" required="required" class="input-mini" type="text" value=""></label>'></span>

</div>

它应该打印像...在zf2 manual 2.0解释

<div class="" id="colors_container">

   <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="colors[0][hash]"></label>

   <label><span>Color</span><input type="text" value="" class="input-mini" required="required" name="colors[1][hash]"></label>

   <span data-template='<label><span>Color</span><input name="colors[__index__][hash]" required="required" class="input-mini" type="text" value=""></label>'></span>

</div>

我希望html输入名称为colors[__index__][hash]。但它打印名称为<input type="text" value="" class="input-mini" required="required" name="hash">

在上面的例子中。我只会在后$_POST['hash']中获得一个颜色名称。

为什么zf2不打印<input type="text" value="" class="input-mini" required="required" name="colors[0][hash]">?请告诉我的代码有什么问题。

答案

哦,我终于找到了答案。我得打电话

$form->prepare();

在视图中渲染任何内容之前。现在它有效

另一答案

我可以证实。这段代码对我有用:

// prepare form is needed to properly display Collection fields
$form->prepare();

echo $this->form()->openTag($form);

// echo other normal form fields

echo $this->formCollection($form->get('colors'));

echo $this->form()->closeTag();

以上是关于zf2,表单集合没有在zf2中创建正确的输入名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在ZF2中的控制台控制器中创建URL?

ZF2 : 来自路由的参数在提交表单后被清除

ZF2 表单验证来自选择的值,即使发送了无效值

ZF2 Breadcrumbs Helper - 如何将其呈现为无序列表?

检索表单时更改 ZF2 表单行为

使用 ZF2 组件,无需整个 MVC 流程