7

私はタスクタイプの3つのフォームを表示するtodolistを持っています

$task1 = new Task();
$form1 = $this->createForm(new MyForm('f1'), $task1);

$task2 = new Task('fo');
$form2 = $this->createForm(new MyForm('f2'), $task2);

$task3 = new Task();
$form3 = $this->createForm(new MyForm('f3'), $task3);

問題は、送信ボタンが 1 つしかないことです。これら 3 つのタスクを 1 つのコントローラー内で保持するにはどうすればよいですか。ユーザーはフォームを動的に追加することもできます。

それで、これを解決する方法は何ですか

4

3 に答える 3

5

のコレクションを保持するフォーム モデルクラスを作成します。次に、 のコレクションを保持する を作成します。このようにして、必要な数のタスクを含む 1 つのフォームが作成されます。TaskListTaskTaskListTypeTaskType

于 2012-08-01T20:37:17.810 に答える
4

「Francesco Casula」が示した例に従いましたが、完全に機能しました。

または、目的のためにページネーションは必要なかったので、コレクションを次のように入力しました ( 内controller):

$entities = $em->getRepository('AcmeBundle:Stock')->findAll();

$stockList = new StockList(); // This is our model, what Francesco called 'TaskList'

foreach ($entities as $entity) {
    $stockList->addStock($entity);
}

// StockListType() is what Francesco called TaskListType
$form = $this->createForm(new StockListType(), $stockList, array(
    'action' => $this->generateUrl('stock_take_update'),
    'method' => 'POST',
    'attr' => array('class' => 'form-horizontal'),
));

フォーム コレクションの出力をカスタマイズする必要がある人のために、 を繰り返してサブフォームにアクセスすることができました{% for form in forms.children.stocks %}。'Stocks' は、フォーム ビルダーのフィールドの名前です ( StockListType):

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add(
            'stocks', 'collection', array(
                'type' => new StockType(),
            )
        )
        ->add('submit', 'submit')
    ;
}

小枝ビューで最終的に使用したのは次のとおりです。

{{ form_start(forms) }}
    <table class="table table-stripped table-hover">
        <thead>
            <th>#</th>
            <th>Name</th>
            <th>Code</th>
            <th>Location</th>
            <th>Total</th>
            <th>Updated Toal</th>
        </thead>
        <tbody>
            {% set counter = 1 %}
            {% for form in forms.children.stocks %}
                <tr>
                    <div class="hidden">
                        {{ form_widget(form.name) }}
                        {{ form_widget(form.code) }}
                        {{ form_widget(form.location) }}
                        {{ form_widget(form.available) }}
                        {{ form_widget(form.assigned) }}
                        {{ form_widget(form.minLevel) }}
                        {{ form_widget(form.type) }}
                        {{ form_widget(form.colourCode) }}
                    </div>
                    <td>{{ counter }}</td>
                    <td>
                        {% if form.vars.data.name is defined %}
                            {{ form.vars.data.name }}
                        {% endif %}
                    </td>
                    <td>
                        {% if form.vars.data.code is defined %}
                            {{ form.vars.data.code }}
                        {% endif %}
                    </td>
                    <td>
                        {% if form.vars.data.location is defined %}
                            {{ form.vars.data.location }}
                        {% endif %}
                    </td>
                    <td>
                        {% if form.vars.data.total is defined %}
                            {{ form.vars.data.total }}
                        {% endif %}
                    </td>
                    <td>{{ form_widget(form.total) }}</td>
                </tr>
                {% set counter = counter + 1 %}
            {% endfor %}
        </tbody>
    </table>
    {{ form_widget(forms.submit) }}
{{ form_end(forms) }}
于 2014-08-01T14:15:39.950 に答える