Я хочу сравнить два атрибута на форме SYMFONY4 - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть этот тип формы:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('ageMin', NumberType::class),
            ->add('ageMax', NumberType::class,[
'mapped' => false
]);
    }

Моя проблема , я хочу проверить это выражение перед отправкой формы: ageMin <= ageMax </p>

Я пробовал этот код, но он не работает

    $resolver->setDefaults([
            'data_class' => User::class,
            'constraints' => [
new Assert\Expression([
                'expression' => 'value["ageMax] >= value["ageMin"]'
            ]),
]
        ]);

Если есть другие решения?

Ответы [ 3 ]

1 голос
/ 20 апреля 2019

Вы можете легко решить эту проблему, используя любой из следующих

  1. Выражение ограничений

  2. Пользовательское ограничение проверки

0 голосов
/ 21 апреля 2019
 'constraints' => [
                new Assert\Expression([
                    'expression' => '
                    (this["ageMin"].getData() <= this["ageMax"].getData() )
                    )
                    ',
                    'message' => ''
                ]),
0 голосов
/ 20 апреля 2019

Вы можете использовать валидатор ограничений классов:

class UserAgeValidator extends ConstraintValidator
{
    public function validate($user, Constraint $constraint)
    {
        if ($user->getAgeMax() >= $user->getAgeMin()) {
            $this->context->buildViolation($constraint->message)
                ->atPath('ageMin')
                ->addViolation();
            $this->context->buildViolation($constraint->message)
                ->atPath('ageMax')
                ->addViolation();
        }
    }
}

Ссылка на документацию:

https://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator

...