我有这个表单类
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';
}
}
现在,您可以在没有额外选项或有额外选项的情况下使用表单类型。在没有默认选项的情况下,将使用。