如何确保最低<最大验证之前
这里我的实体
/**
* @var int
*
* @ORMColumn(name="min", type="integer", nullable=true)
*/
private $min;
/**
* @var int
*
* @ORMColumn(name="max", type="integer", nullable=true)
*/
private $max;
形式:
->add('min', NumberType::class,array('required' => false))
->add('max', NumberType::class,array('required' => false))
这是一个选择,最小必须比最大较低,然后才能验证表格
如果不正确,我如何验证并向用户发送消息以更改其表格。
谢谢
有多种方法可以想到。
- 评论中已经提到了回调。
- 创建自己的自定义约束
- 使用Expression-Constraint
后者可能是最简单的。基本上看起来像这样:
/**
* @AssertType("integer")
* @AssertExpression("this.getMin() <= this.getMax()")
*/
private $min;
/**
* @AssertType("integer")
*/
private $max;
请参阅:https://symfony.com/doc/current/referent/constraints/constraints/expression.html
创建自定义约束比回调限制更大,因此我不会为此详细介绍,但是您可以在文档中找到一篇好文章。
幸运的是,Symfony> 3.4。
有更好的解决方案 eslowthan,更大的thanorequal,Lessthan,LessThanorequal验证约束带有propertyPath
选项,该选项允许指定对象属性进行比较。
我很惊讶它没有以前实施。
/**
* @AssertLessThanOrEqual(
* message="Too high",
* propertyPath="maxSubscribers")
* @AssertLessThanOrEqual(
* message="Too high",
* value=100000000)
*/
private $min;
/**
* @AssertGreaterThanOrEqual(
* message="Too low",
* value=1)
* @AssertLessThanOrEqual(
* message="Too high",
* value=100000000)
*/
private $max;
您可以在form
中编写min
和max
验证。
->add('ordering', NumberType::class, array(
'attr' => array('min' => 1, 'max' => 100)
))
也在Entity
中:
// src/Entity/YourFoo.php
namespace AppEntity;
use SymfonyComponentValidatorConstraints as Assert;
class YourFoo
{
/**
* @AssertRange(
* min = 120,
* max = 180,
* minMessage = "You must be at least {{ limit }}cm tall to enter",
* maxMessage = "You cannot be taller than {{ limit }}cm to enter"
* )
*/
protected $fooNumber;
...............................
}