【发布时间】:2014-12-05 21:49:05
【问题描述】:
我有两个实体 Invoice 和 Customer。我也有两种表格 InvoiceForm 和 CustomerForm。 当我创建一个新发票(使用 InvoiceForm)时,我还希望能够创建一个新客户(只有一个)。所以这是我的做法(并且有效):
<?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';
}
}
所以在我看来 (Invoice/new.html.twig) 我可以轻松自定义显示 InvoiceForm 属性(标题和日期)的方式,我的意思是我可以将 form_row(invoiceForm.title) 放在任何我想要的地方想,我真的无所不能。但是对于我的“子表单”invoiceForm.customer 的属性,我不能,它是自动完成的(名字、姓氏、电话),因为我所能做的就是使用 invoiceForm.customer。你明白我的意思吗?
如果在我的控制器中,我正在制作一个“new CustomerForm()”,然后渲染这个表单,我可以做我想做的事,但是因为我正在制作一个“new InvoiceForm()”,所以我不能吨。不知道我解释的对不对^^
感谢您的帮助:)
【问题讨论】:
-
这似乎有点倒退。从客户到发票应该存在 OneToMany 关系。然后,可以从新客户那里嵌套一张发票表格。对于现有客户,请在选择客户后创建发票。
-
是的,我已经在做这一切:我有一个单独的页面,其中只有我的 CustomerForm (/customer/new),从我的客户视图中,我可以创建一个新发票。但是客户(不是实体^^)也希望能够从发票创建视图中创建一个新客户(实体)