Я создал сущность Testme
и создал файл crud с bin/console make:crud
и пытаюсь добавить правило проверки в форму, но оно не работает:
Моя сущность:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\TestmeRepository")
*/
class Testme
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @Assert\NotBlank()
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $description;
....
Форма:
<?php
namespace App\Form;
use App\Entity\Testme;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TestmeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('description')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Testme::class,
]);
}
}
Действие контроллера:
/**
* @Route("/{id}/edit", name="testme_edit", methods="GET|POST")
*/
public function edit(Request $request, Testme $testme): Response
{
$form = $this->createForm(TestmeType::class, $testme);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('testme_edit', ['id' => $testme->getId()]);
}
return $this->render('testme/edit.html.twig', [
'testme' => $testme,
'form' => $form->createView(),
]);
}
Если поле name
не заполнено, ошибка проверки корректно отображается при создании нового объекта, но когда я редактирую его и очищаю поле name
, я получаю InvalidArgumentException
в строке $form->handleRequest($request);
:
Ожидаемый аргумент типа "string", задано значение "NULL".
Чего мне не хватает?
РЕДАКТИРОВАТЬ: весь код был сгенерирован командами make:Entity
и make:crud
, я только добавил @Assert\NotBlank()
в $name
свойство.