实体字段形式Symfony2

时间:2014-11-03 08:50:14

标签: forms symfony

我的目标是在用户信息中心中显示社交网络表单,如:

 - Facebook : <input>
 - Twitter : <input>
 - Linkedin : <input>

社交网络是动态的(由管理面板管理)。 我目前有3个实体(社交,UserSocial和用户(FOS ...))。 在用户实体中,我刚刚添加了它:

 /**
     *@ORM\OneToMany(targetEntity="Application\SocialBundle\Entity\UserSocial", mappedBy="user")
     */
    private $userSocials;

我的社交实体:

class Social
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $name;

    /**
     * @var string
     */
    private $class;

    ...
}

我的UserSocial实体:

class UserSocial
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     *@ORM\ManyToOne(targetEntity="Admin\UserBundle\Entity\User", inversedBy="userSocials")
     */
    private $user;

    /**
     *@ORM\ManyToMany(targetEntity="Admin\SocialBundle\Entity\Social", inversedBy="userSocials")
     */
    private $social;

    /**
     * @var string
     *
     * @ORM\Column(name="value", type="string", length=255)
     */
     // Not really sure about it
    private $value;
     ....

最后,UserSocialType,这就是我被困住的地方:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('social', 'entity', array(
        'class' => 'Admin\SocialBundle\Entity\Social',
        'property' => 'name',
        'required' => false,
        ))
        ->add('value')
    ;
}

它只给了我一个选择,其中包含DB中的所有社交名称和值输入。我想为DB中的每个社交实体输入一个值。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

可能你做的有点不同吗? Craete a SocialType:

$builder
        ->add('social', 'text', array(
            'data' => $existingSocial
        ))
        ...
    ;

UserSocialType:

$builder
    ->add('social', new SocialType(), array(
        // pass social to the Social type
        ...
    ))
    ...
;
PS //这些只是我的一般想法,这里有一些错误的行我的代码片段,你不应该将一个对象传递给文本字段,但是你可以使用数据变换器从文本值中获取一个对象..还有我认为您的UserSocial实体未正确配置,$social字段应该收到manyToOne关系