如何确保min<验证前最大值
这是我的实体
/**
* @var int
*
* @ORM\Column(name="min", type="integer", nullable=true)
*/
private $min;
/**
* @var int
*
* @ORM\Column(name="max", type="integer", nullable=true)
*/
private $max;
形式:
->add('min', NumberType::class,array('required' => false))
->add('max', NumberType::class,array('required' => false))
它是一个选项,在验证表格之前,min必须低于max
如果表单不正确,我如何验证并向用户发送信息以更改表单。
由于
答案 0 :(得分:3)
有多种方法可以解决这个问题。
可能后者是最容易的。基本上它看起来像这样:
/**
* @Assert\Type("integer")
* @Assert\Expression("this.getMin() <= this.getMax()")
*/
private $min;
/**
* @Assert\Type("integer")
*/
private $max;
请参阅:https://symfony.com/doc/current/reference/constraints/Expression.html
创建自定义约束比Callback约束更有效,所以我不打算详细说明,但你可以在文档中找到一篇好文章。
答案 1 :(得分:1)
幸运的是,Symfony有一个更好的解决方案&gt; 3.4。
GreaterThan,GreaterThanOrEqual,LessThan,LessThanOrEqual验证约束带有openURL
选项,允许指定要与之比较的对象属性。
我很惊讶它没有提前实施。
propertyPath
答案 2 :(得分:0)
您可以在min
中为.ex:
max
和form
验证
->add('ordering', NumberType::class, array(
'attr' => array('min' => 1, 'max' => 100)
))
同样在Entity
:
// src/Entity/YourFoo.php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class YourFoo
{
/**
* @Assert\Range(
* 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;
...............................
}