Итак, у меня есть DTO, вот так:
namespace App\DTO;
use Symfony\Component\Validator\Constraints as Assert;
class Task
{
/**
* @Assert\Type("string")
* @Assert\NotBlank
*/
public $title;
}
И FormType:
namespace App\Form;
use App\DTO\Task;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TaskFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Task::class,
]);
}
}
И TypeTestCase
вроде так:
namespace App\Tests\Entity;
use App\DTO\Task;
use App\Form\TaskFormType;
use Symfony\Component\Form\Test\TypeTestCase;
class TaskTest extends TypeTestCase
{
public function testValidation()
{
$task = new Task;
$form = $this->factory->create(TaskFormType::class, $task);
$form->submit([]); // empty data should trigger a validation error
dump(
$form->isValid(),
$form->getErrors(true)->getChildren(),
$task
);
}
}
Дамп показывает, что форма считается допустимой, ошибок нет, и показывает, что $task
имеет свойство title
, установленное на null
. Который не должен считаться действительным, поскольку я говорю, что он не может быть пустым.
Конечно, я показываю здесь упрощенный пример. В моем реальном коде я проверяю больше свойств, но все они игнорируются. Кажется, что Form
полностью игнорирует проверку на основе аннотаций. Есть идеи почему?