symfony2将表单呈现为表单类型

时间:2014-12-05 21:49:06

标签: php forms symfony

我有两个实体发票和客户。我还有两种形式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()”,我可以'吨。我不知道我是否正确解释^^

感谢您的帮助:)

1 个答案:

答案 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 作为我的子表单的名称(是的,我知道我没有要求,但我也需要它^^所以也许它会帮助其他人;) )

谢谢!