Почему форма Symfony не проверяет мой DTO с аннотациями ограничений? - PullRequest
0 голосов
/ 28 октября 2019

Итак, у меня есть 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 полностью игнорирует проверку на основе аннотаций. Есть идеи почему?

1 Ответ

1 голос
/ 28 октября 2019

Вы не указали нам свою framework.yml конфигурацию, поэтому я предполагаю, что здесь вам, возможно, не хватает какой-либо конфигурации:

framework:
    validation:
        enabled: true
        enable_annotations: true

Можете ли вы проверить это? Надеюсь, что это проблема, иначе вам придется предоставить нам какую-то трассировку стека, а не сказать «форма верна». Также не забудьте очистить кеш после внесения каких-либо изменений в вашу конфигурацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...