Reputation: 51
I get this error message: Expected argument of type "App\Entity\Artist or null", "string" given at property path "artist".
This is the code of my form in symfony
$builder
->add('date', DateType::class, [
'widget' => 'single_text'
])
->add('artist', TextType::class)
->add('City',TextType::class)
;
And this is the template:
{{ form_start(form)}}
{{ form_widget(form)}}
<button class="btn btn-secondary">{{ button|default('Enregistrer')}}</button>
{{ form_end(form)}}
Entity
class Artist
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=45)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Event", mappedBy="artist", cascade={"persist","remove"})
*/
private $events;
public function __construct()
{
$this->events = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return Collection|Event[]
*/
public function getEvents(): Collection
{
return $this->events;
}
public function addEvent(Event $event): self
{
if (!$this->events->contains($event)) {
$this->events[] = $event;
$event->setArtist($this);
}
return $this;
}
public function removeEvent(Event $event): self
{
if ($this->events->contains($event)) {
$this->events->removeElement($event);
// set the owning side to null (unless already changed)
if ($event->getArtist() === $this) {
$event->setArtist(null);
}
}
return $this;
}
public function __toString()
{
return $this->name;
}
}
This is the error :
Uncaught PHP Exception Symfony\Component\PropertyAccess\Exception\InvalidArgumentException: "Expected argument of type "App\Entity\Artist or null", "string" given at property path "artist"." at D:\wamp64\www\app_music_events\vendor\symfony\property-access\PropertyAccessor.php line 173
{
"exception": {}
}
This is the controller
/**
* Method for editing an event
*
* @Route("/admin/edit/{id}", name="admin.edit", methods="GET|POST")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function edit(Event $event, Request $request): Response
{
$form = $this->createForm(EventType::class, $event);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
$this->addFlash('success', 'Le concert a été modifié avec succès !');
return $this->redirectToRoute('admin.index');
}
return $this->render('admin/edit.html.twig', [
'event' => $event,
'form' => $form->createView()
]
);
}
I don't understand. I do not have this problem when I do not specify Textype in the form.
What is the problem? Thanks
Upvotes: 4
Views: 12239
Reputation: 4349
The problem is that you need to persist an Artist entity along with your Event. Symfony expects an Artist entity type and not a string. Try with EntityType::class
instead of TextType::class
->add('artist', EntityType::class, [
'class' => Artist::class
]);
For more information on the EntityType field, please check the documentation
Upvotes: 3