在我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關係進行不同的處理。 –