我想在createformbuilder中使用多个实体来创建表单。 例如,我希望有一个包含许多实体的许多字段的表单 我想检查视野的条件
userEntity -> email , password
resselerEntity - > (userEntity fields) + managerName , managerFamily
leaderEntity - > (userEntity fields) + credit
如果我想显示resseler字段,则必须显示userEntity
和resselerEntity
的所有字段
如果想要显示userEntity
,则必须显示userEntity
等,
那么我该如何解决这个问题呢? 提前致谢!
答案 0 :(得分:0)
最常见的解决方案是为(在您的情况下)创建单一表单:
然后,创建一个包含userEntityFormType和ressellerEntityFormType两个字段的新表单。
通过这种方式你可以:
像这样的东西
class UserEntityType extends AbstractType
{
public function BuildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstField')
->add('secondField')
[...]
->lastField;
}
public function getName()
{
return 'UserEntityType ';
}
}
class RessellerEntityType extends AbstractType
{
public function BuildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstField')
->add('secondField')
[...]
->lastField;
}
public function getName()
{
return 'RessellersEntityType ';
}
}
class AggregateEntityType extends AbstractType
{
public function BuildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('userEntityField',UserEntityType,array('multiple'=>true)
->add('ressellersEntityField',RessellersEntityType,array('multiple'=>true));
}
public function getName()
{
return 'AggregateEntityType ';
}
}
答案 1 :(得分:0)
我觉得唐大部分都在那里。将构造参数添加到UserType
public function __construct($otherEntityType) // Reseller, Leader etc.
然后使用otherEntityType确定为UserType创建了哪些字段。
答案 2 :(得分:0)
据我了解你的问题,你应该使用类型继承:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('password')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => '\Hamid\User',
));
}
public function getName()
{
return 'hamid_user';
}
}
class ResellerType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('managerName')
->add('managerFamily')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => '\Hamid\Reseller',
));
}
public function getName()
{
return 'hamid_reseller';
}
public function getParent()
{
return 'hamid_user';
}
}
然后为每个实体使用正确的表格。如果由于某种原因,您需要一个适合设置为表单的实体类的单个表单,则需要使用表单事件,如explained in the documentation。