在我Symfony的项目,我现在用的是FOSUserBundle多对多实体关系:使用FOSUserBundle
当用户连接当前用户的值设置在现场形式的默认值,我可以收集他的信息是这样:
$user=$this->container->get('security.context')->getToken()->getUser()->getUsername();
$user=$this->container->get('security.context')->getToken()->getUser()->getEmail();
/* ...etc */
这是我的用户实体:
class Users extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Parcs", inversedBy="users")
* @ORM\JoinTable(name="users_parcs",
* joinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="parc_id", referencedColumnName="id")
* }
*)
*/
private $parcs;
/**
* Get parcs
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getParcs()
{
return $this->parcs;
}
/**
* Set parcs
*
* @return \Doctrine\Common\Collections\Collection
*/
public function setParcs($parcs)
{
return $this->parcs;
}
正如你所看到的,我添加其他多对多关系在我的用户类中,$parcs
。
这是我的公园实体:
class Parcs
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Users", mappedBy="parcs")
*/
private $users;
//rest of my entity attributes, object, properties etc
// getters and setters
/**
* Get users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
/**
* Set users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function setUsers($users)
{
return $this->users;
}
现在在树枝认为,只有当用户连接可以添加一个展区。如果我连接,我可以访问addingParcAction()
。这是我的控制器方法:
public function addParcsAction() {
// get the current username
$user=$this->container->get('security.context')->getToken()->getUser()->getUsername();
$em=$this->getDoctrine()->getManager();
$parc = new Parcs;
$form=$this->createForm(new ParcsType($user), $parc);
$request = $this->getRequest();
if ($request->isMethod('POST') | ($form->isValid())) {
$form->bind($request);
$parc = $form->getData();
$em->persist($parc);
$em->flush();
return $this->redirect($this->generateUrl('myView'));
}
else {
return $this->render('MySpaceMyBundle:MyFolder:addParcs.html.twig', array('form' => $form->createView()));
}
}
除了主体之外,一切正常:没有数据在我的用户字段中被保留。实际上,新的parc已经注册,但我的实体fiedl用户是空的。
只有一个用户可以添加parc,但许多用户可以与此parc关联(这是在管理视图中创建的,与此问题无关)。 我怎样才能persit的关系是这样的:
我获取当前用户,然后当我想补充一个展区,在 实体领域的用户自动填写自己的用户名我被安全回收。上下文方法。
编辑
我也试图在我的控制器此解决方案:这时候我已经这个错误发生
public function addParcsAction() {
// get the current username
$currentUser=$this->container->get('security.context')->getToken()->getUser()->getUsername();
$em=$this->getDoctrine()->getManager();
$parc = new Parcs;
$form=$this->createForm(new ParcsType(), $parc);
$form->get('users')->setData($currentUser);
$request = $this->getRequest();
if ($request->isMethod('POST') | ($form->isValid())) {
$form->bind($request);
$parc = $form->getData();
$em->persist($parc);
$em->flush();
return $this->redirect($this->generateUrl('myView'));
}
else {
return $this->render('MySpaceMyBundle:MyFolder:addParcs.html.twig', array('form' => $form->createView()));
}
}
和:
无法转换值对于属性路径“用户”:预计 Doctrine \ Common \ Col lections \ Collection对象。
的确我忘记了'public function __construct()',但是当我坚持数据的形式时,它什么也没有改变,问题仍然是一样的。 –
在我最初的帖子中看到我的编辑,我尝试了一些不同的东西。我想我需要用ManyToMany关系进行不同的处理。 –