我目前正在使用 zend-expressive,现在我想使用 zend-form 生成一个表单。一切都安装正确。我现在有以下设置:
<?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)中,我有以下代码段:
{{ 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 }}
这很好地显示了表格。现在我的问题。如果我尝试编辑一个类别,我会像这样填充表单:
$formData = [
'id' => $category->getId(),
'name' => $category->getName(),
'features' => [
2,
3,
],
];
$this->categoryForm->setData($formData);
但现在表单生成了下一个片段:
<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>
如您所见,第二个选择元素的名称错误。其他一切都很好,但名称生成。我不知道我是否错过了什么。我真的试图在其他网站上找到一些帮助,但没有解决问题。也许你看到了我的错误,可以帮助我完成这个表格。
提前非常感谢。