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

标签 php symfony error-handling doctrine

我有一个具有ID,名称,邮件等属性的User类。
我正在实现密码恢复过程,因此我创建了带有以下列的password_recovery表:

  • id
  • user_id
  • token
  • 创建日期
  • 到期日期
  • 已过期

  • 这是我的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()

    关于php - 创建密码恢复表-插入值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898138/

    相关文章:

    symfony - 如何在symfony 3.1中自定义错误页面模板?

    python - 使用 python 绕过 HTTP 403

    php - Laravel 用 hashids 替换所有 get 的主键

    php - 将 DIV 保存为图像

    Php在单选按钮上显示随机记录[测验]

    Symfony2 使用包 :controller:action notation 在 kernelControllerEvent 中设置 Controller

    php - 使用自定义模板自定义Pagerfanta分页的布局

    php - 如何从命名空间文件中向全局空间声明一个新类?

    php - 使用Symfony的ACL时,使用JOIN查询还是IN数组查询更好?

    php - 在 cakephp3.0 内部错误的情况下强制用户注销