我有一个User类,其中包含id,name,mail等属性。
我正在实施密码恢复过程,因此我创建了一个包含以下列的password_recovery
表:
这是我的PasswordRecovery
班级:
namespace \UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="password_recovery")
*/
class PasswordRecovery {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $idUser;
/**
* @ORM\Column(type="string")
*/
private $token;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $createdDate;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $expireDate;
/**
* @ORM\Column(type="boolean")
*/
private $expired; }
当用户想要恢复密码时,他必须输入他的电子邮件。如果邮件在db中,我创建一个PasswordRecovery
对象并将其存储在db中。这就是我这样做的方式:(代码的一小部分)
if (!empty($resetMail))
{
$recovery = new PasswordRecovery();
$token = bin2hex(openssl_random_pseudo_bytes(16));
$recovery->setToken($token);
$userId = $resetMail->getId();
$recovery->setIdUser($userId);
$recovery->setCreatedDate(new \DateTime('now'));
$expiry = (new \DateTime('now + 1day'));
$recovery->setExpireDate($expiry);
$recovery->setExpired(false);
$em = $this->getDoctrine()->getManager();
$em->persist($recovery);
$em->flush(); }
我收到了这个错误:
Catchable Fatal Error: Argument 1 passed to \UserBundle\Entity\PasswordRecovery::setIdUser() must be an instance of \UserBundle\Entity\User, integer given, called in /home/user/project/src/UserBundle/Controller/AccountController.php on line 553 and defined
为什么?
答案 0 :(得分:0)
您需要使用setIdDUser(User)
。这是一个代理对象,因为它是对另一个表(实体)
以同样的方式调用getIdUser()
时,您将再次获得一个代理对象,如果您想要int值,则需要调用getId()
。