使用inherit_data时如何启用空的根表单名称(子表单)

时间:2016-09-10 10:56:03

标签: symfony

我已经在symfony文档中应用了这个示例,以减少代码重复与" inherit_data"。

http://symfony.com/doc/current/form/inherit_data_option.html

public function buildForm(FormBuilderInterface $builder, array $options)
{
    // ...

    $builder->add('foo', LocationType::class, array(
        'data_class' => 'AppBundle\Entity\Company'
    ));
}

它运作良好但是当我使用带有 GET 方法的搜索表单时,我会得到一个这样的网址:

foo%5Baddress%5D=some+address&foo%5Bzipcode%5D=5000&foo%5Bcity%5D=paris&foo%5Bcountry%5D=france

我希望网址像这样:

address=some+address&zipcode=5000&city=paris&country=france

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您需要一个平面(非嵌套)表单字段名称。如果您想阅读技术细节,请参阅this issue和此pull request

我找到了一些例子here。如果您使用的是Symfony 2,this example也会有所帮助。我找到了两个related questions

解决方案1:使用createNamed方法创建表单。

使用createNamed方法创建表单,并将第一个参数($name)设置为null

$form = $this->get('form.factory')->createNamed(null, new MyFormType(), $dataObject, $formOptions);

解决方案2:更改FormType

或者,您可以使用getBlockPrefix的{​​{1}}方法将名称设置为FormType

null