0

私は現在 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>

ご覧のとおり、2 番目の select 要素の名前が間違っています。他のすべてはうまく機能しますが、名前の生成です。何かを見逃しているかどうかはわかりません。私は実際に他のウェブサイトでいくつかのヘルプを見つけようとしましたが、何も問題を解決しませんでした. たぶん、あなたは私の間違いに気づき、このフォームを完成させるのを手伝ってくれるでしょう.

よろしくお願いします。

4

1 に答える 1