首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zend-form集合没有生成正确的名称

zend-form集合没有生成正确的名称
EN

Stack Overflow用户
提问于 2016-08-26 17:35:02
回答 1查看 61关注 0票数 0

我目前正在使用zend-expressive,现在我想使用zend-form来生成一个表单。一切都安装正确。我现在有了以下设置:

代码语言:javascript
复制
<?php

use Zend\Filter;
use Zend\Form\Element;
use Zend\Form\Form;
use Zend\ServiceManager\Exception;
use Zend\Validator;

class CategoryForm extends Form
{
    public function __construct($features = [])
    {
        parent::__construct('category');

        $this->add([
            'name' => 'id',
            'type' => Element\Hidden::class,
        ]);

        $this->add([
            'name' => 'name',
            'type' => Element\Text::class,
            'options' => [
                'label' => 'Name',
            ],
        ]);

        $this->add([
            'name' => 'features',
            'type' => Element\Collection::class,
            'options' => [
                'label' => 'Features',
                'target_element' => new Element\Select('feature', $features),
            ],
        ]);
    }
}

在我的模板(Twig)中,我有以下代码片段:

代码语言:javascript
复制
{{ form().openTag(form)|raw }}

    {{ formElement(form.get('id')) }}

    {% set element = form.get('name') %}
    <div>
        {{ formLabel(element) }}
        <div>
            {{ formElement(element) }}
        </div>
    </div>

    {% set collection = form.get('features') %}
    {{ formLabel(collection) }}
    {% for element in collection %}
        <div>
            {{ formSelect(element) }}
        </div>
    {% endfor %}

{{ form().closeTag(form)|raw }}

这将很好地显示表单。现在我的问题来了。如果我试图编辑一个类别,我会像这样填充表单:

代码语言:javascript
复制
$formData = [
    'id' => $category->getId(),
    'name' => $category->getName(),
    'features' => [
        2,
        3,
    ],
];

$this->categoryForm->setData($formData);

但是现在表单生成了下一个片段:

代码语言:javascript
复制
<form action="" method="POST" name="category">
    <input name="id" value="2" type="hidden">

    <div>
        <label>Name</label>
        <div>
            <input name="name" value="Foo" type="text">
        </div>
    </div>

    <label>Features</label>

    <div>
        <select name="features[0]">
            <option value="1">A</option>
            <option value="2" selected>B</option>
            <option value="3">C</option>
        </select>
    </div>

    <div>
        <select name="1"> <!-- The name is wrong here -->
            <option value="1">A</option>
            <option value="2">B</option>
            <option value="3" selected>C</option>
        </select>
    </div>
</form>

如您所见,第二个select元素的名称是错误的。其他的一切都很好,除了名字的生成。我不知道我是不是错过了什么。我真的试图在其他网站上寻求帮助,但都没有解决问题。也许您看到我的错误,可以帮助我完成此表单。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2016-08-26 19:59:12

好的,经过几个小时的调试,我发现我过早地使用了prepare()。现在,我在使用setData之后准备了表单,一切都很正常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39163113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档