我的目标是在用户信息中心中显示社交网络表单,如:
- 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中的每个社交实体输入一个值。 提前感谢您的帮助。
答案 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关系