我想比较表单 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
您可以使用以下任一方法轻松解决此问题
'constraints' => [
new Assert\Expression([
'expression' => '
(this["ageMin"].getData() <= this["ageMax"].getData() )
)
',
'message' => ''
]),
我有这个表格类型:
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
您可以使用以下任一方法轻松解决此问题
'constraints' => [
new Assert\Expression([
'expression' => '
(this["ageMin"].getData() <= this["ageMax"].getData() )
)
',
'message' => ''
]),