@HellWalk

Почему не работает валидация на уровне формы?

Все делаю по официальной документации:

Entity
class Passport
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @Assert\NotBlank
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $series;

    /**
     * @Assert\NotBlank
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $number;

    /**
     * @Assert\NotBlank
     * @ORM\Column(type="date", nullable=false)
     */
    private $issueDate;

    /**
     * @Assert\NotBlank
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $issueBy;

//...


PassportType
class PassportType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('series', null, [
                'label' => 'Серия',
            ])
            ->add('number', null, [
                'label' => 'Номер',
            ])
            ->add('issueDate', null, [
                'label' => 'Дата выдачи',
            ])
            ->add('issueBy', null, [
                'label' => 'Кем выдан',
            ])
        ;
    }
//...


Test:
public function testFailed(): void
    {
        $entity = new Passport();
        $form = $this->factory->create(PassportType::class, $entity);

        $form->submit([
            'series' => null,
            'number' => null,
            'issueDate' => null,
            'issueBy' => null,
        ]);

        $this->assertFalse($form->isValid()); // true
    }


Тест валится, потому что форма считает, что все валидно.
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Fishernet
попробуйте так:
use App\Entity\Passport;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...

class PassportType extends AbstractType
{
    // ...

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Passport::class,
        ]);
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы