我有两个实体发票和客户。我还有两种形式InvoiceForm和CustomerForm。 当我创建一个新的Invoice(使用InvoiceForm)时,我希望能够创建一个新的Customer(只有一个)。所以这就是我的工作方式(并且有效):
<?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。你明白我的意思吗?
如果,在我的控制器中,我正在制作一个“新的CustomerForm()”,然后渲染这个表单,我可以做我想要的,但是因为我正在制作一个“新的InvoiceForm()”,我可以'吨。我不知道我是否正确解释^^
感谢您的帮助:)
答案 0 :(得分:0)
好的,我自己找到了答案,实际上我可以通过以下方式访问我的子表单属性:
{{ form_row(form.customer.firstname }}
{{ form_row(form.customer.lastname }}
{{ form_row(form.customer.phone }}
所以我可以根据需要自定义。此外,还有一种方法可以在视图中测试表单类型:
{{ form.customer.vars.block_prefixes.2 }}
在我的情况下将返回 customer_create 作为我的子表单的名称(是的,我知道我没有要求,但我也需要它^^所以也许它会帮助其他人;) )
谢谢!