【问题标题】:2 entities 1 form Symfony 32 个实体 1 个来自 Symfony 3
【发布时间】: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) }} 来看看你得到了什么?这是题外话,但你是想让人们输入他们实际的谷歌密码吗?这似乎有点不确定。

标签: symfony doctrine


【解决方案1】:

你需要在另一个表单中调用一个表单,像这样调用它的类型:

 $builder
    ->add('id',HiddenType::class)
    ->add('FullName',TextType::class)
    ->add('accounts', 'collection', array(
            'type' => new AccountType(), 
            'allow_add' => true,))

【讨论】:

  • 这会触发错误。这很可能适用于 symfony 2.x
  • 'Could not load type "collection" 500 Internal Server Error - InvalidArgumentException'
  • 你添加了AccountType的使用吗?
  • 到控制器?是的,我做到了。
  • 没有在您调用 AccountType 类的用户表单类中
【解决方案2】:

答案其实很简单。我所需要的只是为 $accounts 属性添加正确的注释。

/**
* @ORM\ManyToMany(targetEntity="Account")
*
private $accounts;   

感谢您的所有意见。整个脚本现在正在运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多