Php Symfony表格多对多,无需收集

Php Symfony表格多对多,无需收集,php,forms,symfony-forms,symfony-2.3,Php,Forms,Symfony Forms,Symfony 2.3,我有两个实体,用户和帐户。一个帐户可以由多个用户拥有,一个用户可以拥有多个帐户。因此,我有一个处理这个关系的实体UserHasAccount,加上一些为每个User-Account关系都有个性化值的字段,比如位置,showInMenu,showinebar 在帐户设置中,当用户登录时,我希望显示这些选项,但仅针对当前登录的用户。 因此,我最终得到了两种表单类型: AccountEditType: class AccountEditType extends AbstractType { p

我有两个实体,
用户
帐户
。一个
帐户
可以由多个用户拥有,一个
用户
可以拥有多个
帐户
。因此,我有一个处理这个关系的实体
UserHasAccount
,加上一些为每个
User-Account
关系都有个性化值的字段,比如
位置
showInMenu
showinebar

在帐户设置中,当用户登录时,我希望显示这些选项,但仅针对当前登录的用户。 因此,我最终得到了两种表单类型:

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
是用户的集合,因此我不能使用仅映射一个关系(而不是集合)的
UserAccountEditType
。如果我像这样离开它,我有以下错误:

表单的视图数据应该是Acme\UserBundle\Entity\UserHasAccount类的实例,但却是Doctrine\ORM\PersistentCollection类的实例

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


马克西姆

我也有同样的问题。你解决了吗?没有,它仍然在我的待办事项列表中,但在响应数据库结构之前,我还有更重要的事情要做,你必须定义一个集合(因为它是一对多关系)。但是,您可以只为集合数据定义用户,并进行表单主题化,以将其呈现为单个用户,而无需原型和所有集合内容。通过这种方式,您可以从symfony表单功能(验证、自动持久性)中获益,而无需使用手动方式(手动方式)。