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表单功能(验证、自动持久性)中获益,而无需使用手动方式(手动方式)。