我有一个User类,它具有id、name、mail等属性。我正在实现密码恢复过程,因此我创建了一个password_recovery
表,其中包含以下列:
- id
- user_id
- 标记
- createdDate
- expiryDate
- isExpired
这是我的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; }
当用户想要恢复他的密码时,他必须输入他的电子邮件。如果邮件在数据库中,我创建一个PasswordRecovery
对象并将其存储在数据库中。我是这样做的:(一小部分代码)
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
为什么?
您需要使用setIdDUser(User)
。这是一个代理对象,因为它是对另一个表(实体)的引用
以同样的方式,当你调用getIdUser()
时,你将再次获得一个代理对象,如果你想要int值,你必须调用getId()
。