我可以在symfony2中的FormType类中构建两个表单吗


Can I build two forms in FormType class in symfony2?

我有这个表单类

class ProfileType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('class')
            ->add('age')
            ->add('parent')
     }

我的问题是,我需要两个表单,一个用于后端,我需要所有字段,另一个用于前端,我需要几个字段。

我需要为两个表单创建单独的类吗?或者我可以以某种方式将两个表单放在一个类中,就像假设我不想在前端显示parent一样。

问题是,如果我在模板中只显示几个字段,那么当我提交表单时,这些字段就会被设置为null。因此,我需要从类本身中删除

您可以使用$options参数。

$form = $this->createForm(new ProfileType(), $profile, array('status' => 'backend'));

在你的构建表单中:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('name')
            ->add('class')
            ->add('age')
            ->add('parent');
    if($options['status'] == 'backend')
     {
        $builder->add('other1')
                ->add('other2');
     }
}

但这是一个相当肮脏的解决方案,我个人会创建两种类型。

也添加默认选项:

class ProfileType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name')
            ->add('class')
            ->add('age')
            ->add('parent');
        if($options['status'] == 'backend')
        {
            $builder->add('other1')
                ->add('other2');
        }
    }
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle'Entity'Profile',
            'status' => 'frontend',
        ));
    }
    /**
     * @return string
     */
    public function getName()
    {
        return 'appbundle_profile';
    }
}

现在,您可以在没有额外选项或有额外选项的情况下使用表单类型。在没有默认选项的情况下,将使用。