【发布时间】:2017-05-29 06:48:15
【问题描述】:
对 symfony 有点熟悉,直到我发现自己身处其中。
我有两个实体:用户和帐户。
每个用户都有一系列帐户,如 google 帐户、facebook 帐户等。用户在一个表中,帐户在另一个表中。显然,帐户是根据用户的 id 获取的。
如何将两个实体合并到一个表单中,以便获取、创建、编辑和/或删除条目?
我的用户实体:
use statements here
...
private $id;
private $fullname;
private $accounts;
public function __construct(){
$this->accounts = new ArrayCollection();
}
//setters and getters...
我的帐户实体:
use statements here
...
private $id;
private $user_id; //id in user entity
private $service; //i.e google account
private $username;
private $password;
//setters and getters...
我的用户表单:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
...
$builder
->add('id',HiddenType::class)
->add('FullName',TextType::class)
->add('accounts'.,CollectionType::class,[
'entry_type' => AccountType::class
])
...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\User'
));
}
帐户表单:
class AccountType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
...
$builder
->add('id',HiddenType::class)
->add('accountname',TextType::class) //i.e Google Account
->add('username',TextType::class)
->add('password',TextType::class)
...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Account'
));
}
我的控制器:
...
@Route("/users/{id}/edit")
...
public function EditAction(Request $request, User $user){
...
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
...
...
return $this->render("/pages/users/edit.html.twig",
["form"=>$form->createView()]
);
完全没有错误,但表单未显示帐户实体的任何字段。
i,e,. {{ form_row(accounts.username) }}
任何想法或帮助或指出我正确的方向将不胜感激。
【问题讨论】:
-
->add('accounts'.CollectionType::class有一个点,你在第三个参数之前漏掉了一个逗号。 -
您的用户目前有帐户吗?至少需要一个才能显示任何帐户字段。
-
是的,两个表中都有帐户和/或数据。
-
Mateusz Sip 这只是一个错字。已经修好了。
-
我想它可能是你的树枝。特别是在您遍历帐户的地方。你有没有试过只做一个 {{ form(form) }} 来看看你得到了什么?这是题外话,但你是想让人们输入他们实际的谷歌密码吗?这似乎有点不确定。