可捕获致命错误:参数1传递给?Symfony2
我被下面的错误消息困住了,很沮丧: 可捕获的致命错误:参数1传递给Medicine\UserBundle\Entity\User ::setUsertype()必须是Medicine\UserBundle\Entity\Usertype的实例, 给定的条令\Common\Collections\ArrayCollection实例,在中调用 /opt/lampp/htdocs/drugs/vendor/symfony/src/symfony/Component/Form/Util /第347行的PropertyPath.php,并在/opt/lampp/htdocs/drugs/src中定义/ Medicine/UserBundle/Entity/User.php第224行 我认为这个错误是由于在我的实体中使用了多个域,我甚至尝试在另一个实体中保留一个域 我有一个user实体和一个usertype实体,usertype_id是user表中的一个manytone字段。以下是这两个实体的代码:- 用户可捕获致命错误:参数1传递给?Symfony2,symfony,Symfony,我被下面的错误消息困住了,很沮丧: 可捕获的致命错误:参数1传递给Medicine\UserBundle\Entity\User ::setUsertype()必须是Medicine\UserBundle\Entity\Usertype的实例, 给定的条令\Common\Collections\ArrayCollection实例,在中调用 /opt/lampp/htdocs/drugs/vendor/symfony/src/symfony/Component/Form/Util /第347行的P
namespace Medicine\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="Medicine\UserBundle\Repository\UserRepository")
* @ORM\Table(name="user")
* @ORM\HasLifecycleCallbacks()
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\HasLifecycleCallbacks()
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $username;
/**
* @ORM\ManyToOne(targetEntity="Usertype", inversedBy="users")
* @ORM\JoinColumn(name="usertype_id", referencedColumnName="id")
*/
protected $usertype;
/**
* @ORM\Column(type="string")
*/
protected $image;
/**
* Set usertype
*
* @param Medicine\UserBundle\Entity\Usertype $usertype
*/
public function setUsertype(\Medicine\UserBundle\Entity\Usertype $usertype)
{
$this->usertype = $usertype;
}
/**
* Get usertype
*
* @return Medicine\UserBundle\Entity\Usertype
*/
public function getUsertype()
{
return $this->usertype;
}
}
我只是展示相关的代码,我有上面代码的所有getter和setter方法
用户类型
namespace Medicine\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="Medicine\UserBundle\Repository\UsertypeRepository")
* @ORM\Table(name="usertype")
* @ORM\HasLifecycleCallbacks()
*/
class Usertype
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\HasLifecycleCallbacks()
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="usertype")
*/
protected $users;
public function __construct()
{
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add users
*
* @param Medicine\UserBundle\Entity\User $users
*/
public function addUser(\Medicine\UserBundle\Entity\User $users)
{
$this->users[] = $users;
}
/**
* Get users
*
* @return Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
}
控制器
namespace Medicine\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="Medicine\UserBundle\Repository\UserRepository")
* @ORM\Table(name="user")
* @ORM\HasLifecycleCallbacks()
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\HasLifecycleCallbacks()
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $username;
/**
* @ORM\ManyToOne(targetEntity="Usertype", inversedBy="users")
* @ORM\JoinColumn(name="usertype_id", referencedColumnName="id")
*/
protected $usertype;
/**
* @ORM\Column(type="string")
*/
protected $image;
/**
* Set usertype
*
* @param Medicine\UserBundle\Entity\Usertype $usertype
*/
public function setUsertype(\Medicine\UserBundle\Entity\Usertype $usertype)
{
$this->usertype = $usertype;
}
/**
* Get usertype
*
* @return Medicine\UserBundle\Entity\Usertype
*/
public function getUsertype()
{
return $this->usertype;
}
}
当用户想要登录时执行此操作。他将填写用户名密码和用户类型:
public function indexAction()
{
$entity = new User();
$form = $this->createForm(new LoginForm(), $entity);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
echo "<pre>"; print_r($entity->getUsertype()); exit;
$em = $this->getDoctrine()
->getEntityManager();
$em->persist($entity);
$userrepository = $em->getRepository('MedicineUserBundle:User');
echo "<pre>"; print_r($entity->getUsertype()); exit;
$all = $userrepository->findOneBy(array('login' => $entity->getLogin(), 'password' => $entity->getPassword()));
if($all)
{
return $this->redirect($this->generateUrl('MedicineUserBundle_login'));
}
}
}
return $this->render('MedicineUserBundle:User:loginpage.html.twig',array(
'form' => $form->createView()
));
}
'multiple'=>true
与实体关联定义一起导致此问题
您应该发现,如果您将multiple更改为false(因此只能为您的用户选择一个用户类型),则一切正常
如果您希望一个用户有多个用户类型,那么您有多对多关联—一个用户可以有多个用户类型,而一个用户类型可以有多个用户。请参阅条令的多个关联类型以实现此
希望这能有所帮助。我认为问题出在您的登录表单中-我们可以看看吗?@jstephenson:-我也用登录表单更新了我的问题