Аргумент 1, переданный в App \ Entity \ Invitacion :: setEmail (), должен быть экземпляром App \ Entity \ User или null - Symfony 4 - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в Symfony4. У меня проблема со значением, указанным в таблице. Я слежу за документацией Symfony. Я хочу сохранить переменную пользователя email и codeinvitations в таблице приглашений, но это вызывает ошибку.

Пожалуйста, помогите мне решить мои проблемы.

Это мои объекты

Приложение / Entity / User. 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;
    }

}

App / Entity / 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;
    }

}


В Контроллере я создаю пользователя при регистрации в форме. В то же время я сохраняю email и переменную codeinvitations в таблице приглашение , но это дает мне ошибку.

Контроллер

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

ОШИБКА

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.

1 Ответ

0 голосов
/ 08 мая 2020

Как уже было сказано в комментариях, setEmail (? User email) принимает в качестве входных данных null или User-объект. Я подозреваю, что вы захотите ввести адрес электронной почты там, чтобы вы могли сделать:

Setter:

setEmail(?string $email)

Позвоните:

$user = new User();
$user->setEmail('test@test.com');
$invitacion->setEmail($user->getEmail());

или если вы действительно хотите добавить полноценный пользовательский объект как есть:

$user = new User();
$user->setEmail('test@test.com');
$invitacion->setEmail($user);

В обоих случаях они должны быть сначала пользовательским объектом. Тогда вы сможете получить доступ к объекту или почте для своего сеттера.

...