0

ArticleOrder エンティティと OneToMany 関係を持つ PurchaseOrder エンティティがあります。さらに、 ArticleOrder エンティティは Order と Article ID だけでなく、Amount も保持します。さらに、ArticleOrder エンティティには、ArticleSupplier という名前の別のエンティティとの OneToMany 関係があります。すべての記事の注文金額を複数のサプライヤーに分割できるようにします。これを解決するためのフォームを作成したいと思います。そこで、次の 3 つのフォーム タイプを作成しました。

ArticleOrders の埋め込みコレクションのみを保持するもの:

 public function buildForm(FormBuilderInterface $builder, array $options)
{

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

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\AppBundle\Entity\PurchaseOrder',
    ));
}

ArticleSupplier エントリの埋め込みコレクションを保持するもの:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('articleOrderReferences', 'collection', array('type' => new ProducedAmountOrderSubArticleType()));

}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\AppBundle\Entity\ArticleOrderReference',
    ));
}

そして、ArticleSupplier Amount 入力フィールド用の 1 つ:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('produced');

}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Acme\AppBundle\Entity\AOSupplierReference',
    ));
}

小枝コード:

<span class="purchaseOrders">
                    {% for purchaseOrder in form.purchaseOrders %}
                        <span class="articleOrderReferences">
                            {% for articleOrderReference in form.articleOrderReferences %}
                                {{ form_errors(articleOrderReference.produced) }}
                                {{ form_widget(articleOrderReference.produced, { 'attr': {'class': 'input-mini'} }) }}
                            {% endfor %}<br>
                        </span>

                    {% endfor %}
                </span>

コントローラ:

           $form = $this->createForm(new ProducedAmountOrderType(), $order);

//         // process the form on POST
//         if ($request->isMethod('POST')) {
//          $form->bind($request);
//          if ($form->isValid()) {

//              $em = $this->getDoctrine()->getManager();
//              $em->persist($order);
//              $em->flush();

//              return $this->redirect($this->generateUrl('order', array('id' => $orderId )));
//          }
//         }

        return $this->render('AcmeAppBundle:ProducedAmount:index.html.twig', array(
                'form' => $form->createView(),
                'order' => $order,
                'articles' => $articles,
        ));

空白のページしか表示されないため、リクエストの投稿をコメントアウトしました。今、私はいつもこのエラーメッセージを受け取ります:

Method "articleOrderReferences" for object "Symfony\Component\Form\FormView" does not exist in AcmeAppBundle:ProducedAmount:index.html.twig at line 150 

私は何を間違っていますか?

4

1 に答える 1

2

これ:

{% for articleOrderReference in form.articleOrderReferences %}

次のようにする必要があります。

{% for articleOrderReference in **purchaseOrder**.articleOrderReferences %}

もちろん、* をドロップします。大胆にしてみました。

于 2013-05-30T13:45:49.670 に答える