【问题标题】:I want to compare two attribute on form SYMFONY4我想比较表格 SYMFONY4 上的两个属性
【发布时间】:2019-09-10 02:03:39
【问题描述】:

我有这个表单类型:

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

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

我已尝试过此代码,但无法正常工作

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

如果有其他解决方案?

【问题讨论】:

    标签: php symfony validation constraints symfony4


    【解决方案1】:

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

    1. Constraints Expression

    2. Custom Validation Constraint

    【讨论】:

      【解决方案2】:
       'constraints' => [
                      new Assert\Expression([
                          'expression' => '
                          (this["ageMin"].getData() <= this["ageMax"].getData() )
                          )
                          ',
                          'message' => ''
                      ]),
      

      【讨论】:

        【解决方案3】:

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

        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

        【讨论】:

        • 那不行,因为我的ageMax 没有与类映射,我的意思是我没有getter 和setter "ageMax",所以你有这个问题的解决方案吗?
        • @Khalil 然后添加一个 getter 和 setter。
        猜你喜欢
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多