Форма проверки Symfony4 с сопоставленными ложными полями формы - PullRequest
1 голос
/ 20 мая 2019

У меня есть сущность с age.
Я создал форму поиска, чтобы показать записи, где ageMin <<code>age <<code>ageMax.
Поэтому я добавил не отображенные поля формы ageMin и ageMax:

$builder
    ->add('ageMin', IntegerType::class, [
        'mapped' => false,
        'required' => false
    ])
    ->add('ageMax', IntegerType::class, [
        'mapped' => false,
        'required' => false
    ])
;

Я хотел бы проверить, ввел ли пользователь min больше, чем max (очень простое требование!).

Я пытался Форма проверки Symfony с сопоставленными ложными полями формы , но это для Symfony 2, а требуемые компоненты меня смущают.

Я тоже нашел эти справочные страницы: https://symfony.com/doc/current/form/without_class.html#form-option-constraints и пробовал:

->add('ageMin', IntegerType::class, [
            'mapped' => false, 
            'required' => false,
            'constraints' => new LessThan('ageMax')
        ])

Нет ошибок, но это не работает.

Другая страница: https://symfony.com/doc/current/validation/raw_values.html

1 Ответ

0 голосов
/ 20 мая 2019

Если существует объект со свойством age, вы можете использовать LessThan для ageMin и GreaterThan для ageMax, чтобы сравнить эти значения с age.

$builder
    ->add('ageMin', IntegerType::class, [
        'mapped' => false,
        'required' => false,
        'constraints' => [new LessThan(['propertyPath' => 'age'])]
    ])
    ->add('ageMax', IntegerType::class, [
        'mapped' => false,
        'required' => false,
        'constraints' => [new GreaterThan(['propertyPath' => 'age'])]
    ])
;

Позаботьтесь о правильном импорте ограничений.

EDIT:

В приведенном выше примере предполагается, что форма использует объект, обладающий свойством age. Если имя класса сущности Foo, то метод configureOptions будет выглядеть так:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Foo::class,
    ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...