Search code examples
phpdatabasesymfonydoctrinesymfony5

I can't add automatically a user ID to it's creation - Symfony 5


So, there's my problem : I want to create a pet profile in my project, everything was working fine until I wanted to add some elementary information, the property User ( The user who created that profile)

I want to add the current User's ID but I'm stuck...

First, there is my Error alert:

Unable to guess how to get a Doctrine instance from the request information for parameter "user".

And then, there is my code on Animal.php:

 /**
 * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="ownedAnimal", orphanRemoval=true, cascade={"persist"})
 * @ORM\JoinColumn(nullable=false)
 */
private $user;

/**
 * @return mixed
 */
public function getUser()
{
    return $this->user;
}

/**
 * @param User $user
 * @return Animal
 */
public function setUser(User $user): Animal
{
    $this->user = $user->getId();
    return $this;
}

And in my User.php :

/**
 * @ORM\ManyToOne(targetEntity=Animal::class, inversedBy="user")
 */
private $ownedAnimal;

public function __construct()
{
    $this->ownedAnimal = new ArrayCollection();
}

/**
 * @return Collection|Animal[]
 */
public function getOwnedAnimal(): Collection
{
    return $this->ownedAnimal;
}

public function addOwnedAnimal(Animal $ownedAnimal): self
{
    if (!$this->ownedAnimal->contains($ownedAnimal)) {
        $this->ownedAnimal[] = $ownedAnimal;
        $ownedAnimal->setUser($this);
    }

    return $this;
}

public function removeOwnedAnimal(Animal $ownedAnimal): self
{
    if ($this->ownedAnimal->removeElement($ownedAnimal)) {
        // set the owning side to null (unless already changed)
        if ($ownedAnimal->getUser() === $this) {
            $ownedAnimal->setUser(null);
        }
    }

    return $this;
}

So, when I try to submit the registration of a new Animal, I got this error above... It seems dumb but I can't find a solution...

Please help me :)


Solution

  • you can do that inside the controller in add function because inside the controller you can have an access to the current user:

    public function create()
    { 
       $animal = new Animal();
       // .......
    
       if($fom->isSubmitted() && $fom->isValid())
       {
          $animal->setUser($this->getUser());
          // persit and flush
       }
    
    }