2013-05-30 60 views
0

我有一个PurchaseOrder实体,它与ArticleOrder实体具有OneToMany关系。此外,ArticleOrder实体不仅保存订单和文章ID,还包含金额。此外,ArticleOrder实体与另一个名为ArticleSupplier的实体具有OneToMany关系。这样,每件商品的订购数量就可以分成多个供应商。 现在我想构建一个表单来解决这个问题。所以,我创建了三个表单类型:多个嵌入式集合

其中一个仅保持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', 
    )); 
} 

还有一对该文章供应商数量输入字段:

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

} 

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

小枝c颂:

<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 

我做错了什么?

回答

2

此:

{% for articleOrderReference in form.articleOrderReferences %} 

应该是:

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

降*的课程。我试图让它大胆。

+0

工作正常!非常感谢你! – ChrisS

+0

而当我只需要特定的输入字段(如下所示:where supplier_id = $ id)是否有集合的查询生成器选项? – ChrisS

+1

否。集合没有任何种类的查询生成器选项。但是,您可以在检索原始$订单并限制供应商时创建自定义查询。不过,不同的问题。 – Cerad