6

Symfony2 で非常にシンプルなフォーラムを作成しようとしています。

私のエンティティは次のとおりです。 ForumCategory (name, description...) ForumTopic (category_id, title) ForumPost (isFirstPost, body, topic_id, author_id...)

ユーザーがトピックを作成しようとすると、トピックと最初の投稿メッセージを作成するために、同じページにフォームを 1 つだけ表示したいと考えています。お気に入り:

  • トピックのタイトルを挿入: ...
  • トピック本文の挿入 (関連する投稿本文): ...

[...]

どうやってやるの?この場合、2 つのフォームをマージすることは可能ですか?

4

3 に答える 3

15

両方のサブフォームを含むフォーム タイプを作成します。

class MergedFormType

    $builder->add('topic', new TopicFormType());
    $builder->add('post',  new PostFormType());

コントローラーでは、配列を MergedFormType に渡すだけです

public function myAction()

    $formData['topic'] = $topic;
    $formData['post']  = $post;

    $form = $this->createForm(new MergedFormType(), $formData);
于 2013-08-21T14:58:27.617 に答える
1

1 対多または 1 対 1 の関係を持つ 2 つのエンティティのフォームをマージしようとしている場合。symfony 2 コンポーネントのフォーム コレクション拡張機能を使用する必要があります。例: Task エンティティには多くのタグがあります

class TaskType extends AbstractType 
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('description');

        $builder->add('tags', 'collection', array('type' => new TagType()));
    }

レンダリングはこのように行うことができます

{{ form_start(form) }}
   <h3>Tags</h3>
   <ul class="tags">
       {# iterate over each existing tag and render its only field: name #}
       {% for tag in form.tags %}
           <li>{{ form_row(tag.name) }}</li>
       {% endfor %}
   </ul>

詳細: http://symfony.com/doc/2.7/cookbook/form/form_collections.html

于 2016-03-05T05:05:20.950 に答える