我有兩個實體發票和客戶。我也有兩種形式InvoiceForm和CustomerForm。 當我創建一個新的發票(包含InvoiceForm)時,我希望能夠創建一個新的客戶(只有一個)。因此,這裏是我如何做到這一點(和它的作品):symfony2呈現窗體類型爲
<?php
namespace Acme\DemoBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class CustomerForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname')
->add('lastname')
->add('phone');
}
public function getName()
{
return 'customer_create';
}
}
<?php
namespace Acme\DemoBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class InvoiceForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('date')
->add('customer', new CustomerForm());
}
public function getName()
{
return 'invoice_create';
}
}
所以,在我看來(發票/ new.html.twig)我可以輕鬆地定製我顯示我的InvoiceForm的屬性的方式(名稱和日期),我的意思是我可以將我的form_row(invoiceForm.title)放在我想要的任何地方,我真的可以做任何事情。但對於我的「子表單」invoiceForm.customer的屬性,我不能,它會自動完成(名字,姓氏,電話),因爲我只能使用invoiceForm.customer。你明白我的意思嗎?如果在我的Controller中創建一個「新的CustomerForm()」,然後渲染這個表單,我可以做我想做的事情,但是因爲我正在製作一個「新的InvoiceForm()」,所以我可以「T。我不知道如果我解釋正確^^
感謝您的幫助:)
這似乎有點倒退。應該有從客戶到發票的OneToMany關係。然後,從新客戶可以嵌套發票表單。對於現有客戶,請在選擇客戶後創建發票。 – geoB 2014-12-05 21:55:42
是的,我已經完成了所有這些工作:我有一個與我的CustomerForm分開的頁面(/ customer/new),並且從我的客戶視圖中,我可以創建一個新的發票。但客戶(不是實體^^)也希望能夠從發票創建視圖創建新客戶(實體) – Igoooor 2014-12-05 22:00:56