2013-05-30 2 views
0

У меня есть объект PurchaseOrder, который имеет отношение OneToMany к объекту ArticleOrder. Кроме того, объект ArticleOrder не содержит только идентификатор заказа и статьи, а также сумму. Кроме того, объект ArticleOrder имеет отношение OneToMany к другому объекту с именем ArticleSupplier. Чтобы упорядоченная сумма каждой статьи была разделена на несколько поставщиков. Теперь я хочу создать форму для решения этой проблемы. Так что я создал на три типа Форма:Несколько встроенных коллекций

One, который держит только внедренный коллекцию 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', 
    )); 
} 

One, который держит встроенную коллекцию записей 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', 
    )); 
} 

и один для поле ввода товарного заказа:

веточка 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 %} 

Отбросьте * s конечно. Я попытался сделать это смелым.

+0

работает нормально! Большое спасибо! – ChrisS

+0

И когда мне нужны только конкретные поля ввода (что-то вроде этого: where supplier_id = $ id), есть ли опция построения запросов для коллекций? – ChrisS

+1

№ Коллекции не имеют каких-либо вариантов построителя запросов. Тем не менее, вы можете создать пользовательский запрос, когда вы получите исходный $ order и лимитеть поставщика. Иной вопрос. – Cerad

Смежные вопросы