【问题标题】:symfony2 rendering of a form as form typesymfony2 将表单渲染为表单类型
【发布时间】: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),从我的客户视图中,我可以创建一个新发票。但是客户(不是实体^^)也希望能够从发票创建视图中创建一个新客户(实体)

标签: php forms symfony


【解决方案1】:

好的,我自己找到了答案,实际上我可以通过以下方式访问我的子表单属性:

{{ form_row(form.customer.firstname }}
{{ form_row(form.customer.lastname }}
{{ form_row(form.customer.phone }}

所以我可以根据需要进行自定义。此外,还有一种方法可以在视图中测试表单类型:

{{ form.customer.vars.block_prefixes.2 }}

在我的情况下,它将返回 customer_create 作为我的子表单的名称(是的,我知道我没有要求,但我也需要它 ^^ 所以也许它会帮助其他人;) )

谢谢!

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 2013-10-17
    • 2015-10-28
    • 1970-01-01
    • 2012-07-23
    • 2015-02-23
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多