У меня есть объект 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
Что я делаю неправильно?
работает нормально! Большое спасибо! – ChrisS
И когда мне нужны только конкретные поля ввода (что-то вроде этого: where supplier_id = $ id), есть ли опция построения запросов для коллекций? – ChrisS
№ Коллекции не имеют каких-либо вариантов построителя запросов. Тем не менее, вы можете создать пользовательский запрос, когда вы получите исходный $ order и лимитеть поставщика. Иной вопрос. – Cerad