我想编辑我的氏族,当我将 Co Leader 设置为 null 时,出现错误,但其余部分正常。
““UserBundle\Entity\User”类型的预期参数,给定“NULL””
我希望有一个人可以帮助我。
氏族.php
/**
* @var User
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\OneToOne(targetEntity="UserBundle\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="coLeader", referencedColumnName="id", onDelete="SET NULL")
* })
*
*
*/
private $coleader = null;
//@SamDufel 的解决方案($coleader 后追加“= null”)
/**
* Set coleader
*
* @param User $coleader
* @return Clan
*/
public function setColeader(User $coleader = null) // <--
{
$this->coleader = $coleader;
return $this;
}
氏族类型.php
->add('coleader', null, array(
'label' => 'clan.coleader',
'required' => false,
'empty_data' => null,
'placeholder' => 'form.nobody',
));
氏族控制器.php
/**
* Displays a form to edit an existing Clan entity.
*
* @Route("/edit/{id}", name="clan_edit")
* @Method({"GET", "POST"})
*/
public function editAction(Request $request, Clan $clan)
{
$current_leader = $clan->getLeader();
$current_coleader = $clan->getColeader();
$editForm = $this->createForm('ClanBundle\Form\ClanType', $clan);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('UserBundle:User');
$current_leader = $user->find($current_leader);
$current_coleader = $current_coleader != '' ? $user->find($current_coleader) : '';
$leader = $editForm['leader']->getData();
$coleader = $editForm['coleader']->getData();
if($leader != $current_leader ){
$current_leader->removeRole('ROLE_LEADER');
$user_leader = $em->getRepository('UserBundle:User')->find($leader);
$user_leader->addRole('ROLE_LEADER');
$user_leader->setClanId($clan);
}
if(!empty($coleader) || $coleader != $current_coleader){
$current_coleader ? $current_coleader->removeRole('ROLE_COLEADER') : '';
$user_co = $em->getRepository('UserBundle:User')->find($coleader);
$user_co->addRole('ROLE_COLEADER');
$user_co->setClanId($clan);
}
if(empty($coleader)){
$current_coleader ? $current_coleader->removeRole('ROLE_COLEADER') : '';
}
$em->persist($clan);
$em->flush();
return $this->redirectToRoute('clan_edit', array('id' => $clan->getId()));
}
return $this->render(
'ClanBundle:clan:form.html.twig',
array(
'clan' => $clan,
'form' => $editForm->createView(),
'status' => 'edit'
)
);
}
User.php 是 FOSUserBundle 中的默认值,除了我的 User.php 中的 3 个实体
//...
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\OneToOne(targetEntity="Clan", mappedBy="leader")
* @ORM\OneToOne(targetEntity="Clan", mappedBy="coLeader")
*/
protected $id;
public function __construct()
{
parent::__construct();
$this->roles = array('ROLE_USER');
$this->createdAt = new \DateTime();
}
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime")
*/
protected $createdAt;
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="ClanBundle\Entity\Clan")
* @ORM\JoinColumn(referencedColumnName="id", onDelete="SET NULL")
*/
protected $clanId;
//...