Symfony形成多对多而无需收集

时间:2013-11-27 00:50:21

标签: php forms symfony-forms symfony-2.3

我有2个实体,UserAccount。多个用户可以拥有Account,而User可以拥有多个Account。所以我有一个正在处理此关系的实体UserHasAccount,以及一些具有每个User - Account关系的个性化值的字段,例如positionshowInMenu,{{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类的实例

如何选择表单类型中的一个关系? 干杯,

马克西姆

0 个答案:

没有答案