传递给App\Entity\Invitacion::setEmail()的参数1必须是App\Entity\User的实例或null - Symfony 4。

问题描述 投票:-1回答:1

我是Symfony4的新手。我有一个与表格中的值设置有关的问题。我一直在关注Symfony的文档。我想把用户的 电子邮件密码邀请 变量在邀请表中,但它给我一个错误。

请帮我解决我的问题。

这些是我的实体

应用实体用户.php


class User implements UserInterface, \Serializable
{
    (...)

    /**
     * @ORM\Column(type="string", length=255, unique=true)
     * @ORM\OneToMany(targetEntity="App\Entity\Invitacion", mappedBy="user")
     */
    private $email;

    /**
     * @ORM\Column(type="string", length=255, unique=true)
     * @ORM\OneToMany(targetEntity="App\Entity\Invitacion", mappedBy="user")
     */
    private $codeinvitaciones;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Invitacion", mappedBy="user")
     */
    private $invitaciones;

    /**
     * User constructor
     */
    public function __construct()
    {
        $this->invitaciones = new ArrayCollection();
    }

    public function getEmail(): ?string
    {
        return $this->email;
    }

    public function setEmail(string $email): self
    {
        $this->email = $email;

        return $this;
    }

    public function getCodeinvitaciones(): ?string
    {
        return $this->codeinvitaciones;
    }

    public function setCodeinvitaciones(string $codeinvitaciones): self
    {
        $this->codeinvitaciones = $codeinvitaciones;

        return $this;
    }

    /**
     * @return Collection|Invitacion[]
     */
    public function getInvitaciones(): Collection
    {
        return $this->invitaciones;
    }

    public function addInvitaciones(Invitacion $invitacion): self
    {
        if (!$this->invitaciones->contains($invitacion)) {
            $this->invitaciones[] = $invitacion;
            $invitacion->setCodeinvitaciones($this);
        }

        return $this;
    }

}

应用实体Invitacion.php


class Invitacion
{
    (...)

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="email")
     * @ORM\JoinColumn(nullable=false)
     */
    private $email;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="invitaciones")
     * @ORM\JoinColumn(nullable=false)
     */
    private $codeinvitaciones;


    public function getId(): ?int
    {
        return $this->id;
    }

    public function getEmail(): ?User
    {
        return $this->email;
    }

    public function setEmail(?User $email): self
    {
        $this->email = $email;

        return $this;
    }

    public function getCodeinvitaciones(): ?User
    {
        return $this->codeinvitaciones;
    }

    public function setCodeinvitaciones(User $codeinvitaciones): self
    {
        $this->codeinvitaciones = $codeinvitaciones;

        return $this;
    }

}


在Controller中,当在表单中注册时,我创建了用户。同时,我还存储了 电子邮件 和变量 密码邀请 表中 请柬 但它给我一个错误。

控制器

(...)
$invitacion->setEmail($email);
$invitacion->setCodeinvitaciones($registroInv);

ERROR

Argument 1 passed to App\Entity\Invitacion::setEmail() must be an instance of App\Entity\User or null,
string given, called in C:\Users\adria\Documents\app\bebeBB\src\Controller\UserController.php on line 38

谢谢

我已经试过了 Invitacion::setEmail(?string) 但它给出了这个错误。

Expected value of type "App\Entity\User" for association field
"App\Entity\Invitacion#$codeinvitaciones", got "string" instead.
symfony doctrine-orm doctrine symfony4
1个回答
0
投票

正如评论中所说,setEmail(?User email)接受null或User对象作为输入。我怀疑你想在那里输入电子邮件地址,所以你可以这样做。

Setter:

setEmail(?string $email)

调用:

$user = new User();
$user->setEmail('[email protected]');
$invitacion->setEmail($user->getEmail());

或者如果你真的想添加一个完整的用户对象,因为它是。

$user = new User();
$user->setEmail('[email protected]');
$invitacion->setEmail($user);

在这两种情况下,首先要有一个用户对象。然后你就可以为你的setter访问对象或邮件。

© www.soinside.com 2019 - 2024. All rights reserved.