Я делаю очень простую форму с помощью Symfony, чтобы добавить цвет в базу данных. Он отлично работает при использовании createFormBuilder
в моем контроллере, но выдает ошибку при использовании createForm
с Type
, который я сделал. Это ошибка, которую я получаю: Возникла исключительная ситуация во время рендеринга шаблона («Catchable Fatal Error: объект класса App \ Entity \ Color не может быть преобразован в строку») .
Я следовал Symfony doc построчно, я также пробовал некоторые решения, приведенные здесь, для других, у которых была такая же проблема (например, добавление метода __toString
в мою сущность), но ничего работы.
Entity
/**
* @ORM\Entity(repositoryClass="App\Repository\ColorRepository")
*/
class Color
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=190, unique=true)
*/
private $name;
/**
* @ORM\Column(type="string", length=190, unique=true)
*/
private $code;
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;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(string $code): self
{
$this->code = $code;
return $this;
}
}
Контроллер
public function new(Request $request)
{
$color = new Color();
$form = $this->createForm(ColorType::class, $color);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$color = $form->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($color);
$entityManager->flush();
return $this->redirectToRoute('colorNew');
}
return $this->render('color/new.html.twig', [
'form' => $form->createView(),
]);
}
Форма
class ColorType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'label' => 'couleur',
])
->add('code', TextType::class, [
'label' => 'code couleur',
])
->add('save', SubmitType::class, ['label' => 'ajouter la couleur'])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Color::class,
]);
}
}
Template
{% extends 'layout/base.html.twig' %}
{% block title %}
Ajouter une couleur
{% endblock %}
{% block content %}
{{ form(form) }}
{% endblock %}
Я ожидаю, что он отобразит два текстовых ввода с соответствующей меткой и кнопкой отправки, вместо этого он выдаст ошибку, о которой я упоминал. В какой-то момент я заставил его работать, комментируя $color = new Color();
в моем контроллере и, таким образом, не передавая $color
в качестве аргумента методу createForm
, он рендерил не только два текстовых ввода и кнопку отправки, но и цветной ввод в начале формы ... (который я не просил).
Заранее спасибо за помощь!