我想比较表单 SYMFONY4 上的两个属性

I want to compare two attribute on form SYMFONY4

我有这个表格类型:

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

我的问题,我想在提交表单之前验证这个表达式:ageMin<=ageMax

我已经尝试过这段代码,但没有用

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

如果有其他解决方案?

您可以使用 Class 约束验证器:

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

您可以使用以下任一方法轻松解决此问题

  1. Constraints Expression

  2. Custom Validation Constraint

 'constraints' => [
                new Assert\Expression([
                    'expression' => '
                    (this["ageMin"].getData() <= this["ageMax"].getData() )
                    )
                    ',
                    'message' => ''
                ]),