我有2个实体,User
和Account
。多个用户可以拥有Account
,而User
可以拥有多个Account
。所以我有一个正在处理此关系的实体UserHasAccount
,以及一些具有每个User - Account
关系的个性化值的字段,例如position
,showInMenu
,{{1 }}
在帐户的设置中,当用户登录时,我想显示这些选项,但仅针对当前登录的用户。 所以我最终得到了2种表格类型:
showInSideBar
:
AccountEditType
class AccountEditType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array(
'label' => 'account.form.name',
'translation_domain' => 'AcmeAccountBundle',
))
->add('timezone', 'genemu_jqueryselect2_timezone', array(
'label' => 'account.form.timezone',
'translation_domain' => 'AcmeAccountBundle',
))
->add('accountUser', new UserAccountEditType($options['user']))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\AccountBundle\Entity\Account',
'user' => null,
'validation_groups' => array('AcmeUpdateAccount'),
'cascade_validation' => true,
));
}
public function getName()
{
return 'acme_account_edit_settings';
}
}
:
UserAccountEditType
问题是class UserAccountEditType extends AbstractType
{
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('showInMenu', null, array(
'label' => 'account.user_account.form.show_in_menu',
'translation_domain' => 'AcmeUserBundle',
'required' => false,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\UserBundle\Entity\UserHasAccount',
));
}
public function getName()
{
return 'acme_general_account_user';
}
}
。Account
是用户的集合,所以我不能使用只映射一个关系(而不是集合)的accountUser
。如果我这样离开,我有以下错误:
表单的视图数据应该是Acme \ UserBundle \ Entity \ UserHasAccount类的实例,但是是Doctrine \ ORM \ PersistentCollection类的实例
如何选择表单类型中的一个关系? 干杯,
马克西姆