创建密码恢复表 - 插入值时出错

时间:2016-10-06 14:03:49

标签: php symfony error-handling doctrine

我有一个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; }

当用户想要恢复密码时,他必须输入他的电子邮件。如果邮件在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

为什么?

1 个答案:

答案 0 :(得分:0)

您需要使用setIdDUser(User)。这是一个代理对象,因为它是对另一个表(实体)

的引用

以同样的方式调用getIdUser()时,您将再次获得一个代理对象,如果您想要int值,则需要调用getId()