Symfony 3 - 子表单和元素名称

时间:2017-11-16 11:57:55

标签: symfony

我想用这样的合成模式创建表单: https://symfony.com/doc/current/form/inherit_data_option.html

我使用Symfony 3.

它正在工作。我有像单个对象的每个元素并添加它。

但最后我的表单元素名称的名称类似于

form[subform][element]

如何在名称属性中制作没有子表单的扁平结构?

use AppBundle\Base\Form\NickType;
use AppBundle\Base\Form\MailType;
use AppBundle\Base\Form\PassType;
use AppBundle\Base\Form\UserType;


class RegisterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nick', NickType::class)
            ->add('mail', MailType::class)
            ->add('password', PassType::class)
            ->add('repeat_password', PassType::class)
(etc...)

和单一元素

class NickType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nick', TextType::class);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'inherit_data' => true
        ));
    }

}

1 个答案:

答案 0 :(得分:0)

如果只继承TextType,则无需定义->andFilterWhere(['between', 'DATE_FORMAT(CREATED_DATE, "%Y-%m-%d")', $this->date_from, $this->date_to] 。您可以删除NickTypeNickType

你可以这样做:

MailType

如果您想重复使用表单字段,则必须创建Custom Form Field Type

class RegisterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nick', TextType::class)
        ;
(etc...)

您可以从元素名称中删除class NickType extends AbstractType { public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( //... )); } public function getParent() { return TextType::class; } } ,但不建议删除它,因为当您阅读填充表单数据的请求时,您可以通过其表单名称来标识表单。 (via

  

您可以将根表单的名称设置为空,然后将字段名称设置为空   将只是形式。通过

这样做
form[]

via