【问题标题】:Symfony forms - Expected argument of type , “string” given at property pathSymfony 形式 - 类型的预期参数,属性路径中给出的“字符串”
【发布时间】:2019-01-02 10:37:02
【问题描述】:

我收到以下错误消息: 类型为“App\Entity\Artist 或 null”、“字符串”的预期参数在属性路径“艺术家”处给出。

这是我在 symfony 中的表单代码

$builder
        ->add('date', DateType::class, [
            'widget' => 'single_text'
        ])
        ->add('artist', TextType::class)
        ->add('City',TextType::class)
        ;

这是模板:

{{ form_start(form)}}
    {{ form_widget(form)}}
        <button class="btn btn-secondary">{{ button|default('Enregistrer')}}</button>
{{ form_end(form)}}

实体

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;
}
}

这是错误:

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": {}
}

这是控制器(CRUD 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()
        ]
    );
}

我不明白。 我没有在表单中指定 Textype 时没有这个问题。

有什么问题?谢谢

【问题讨论】:

标签: symfony symfony-forms symfony4


【解决方案1】:

您要在表单中添加对象artist,它是一个实体。目前,使用 -&gt;add('artist', TextType::class) 将其设置为字符串,但事实并非如此。所以你应该做的是将类型更改为EntityType,如下所示:

$builder
    ->add('date', DateType::class, [
        'widget' => 'single_text'
    ])
    ->add('artist', EntityType::class, [
        'class' => Artist::class,
    ])

//etc...

有关 EntityType 的更多信息,请参阅documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多