Symfony 4 - 形成最小最大验证

时间:2017-12-26 20:51:34

标签: forms symfony validation assert

如何确保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

如果表单不正确,我如何验证并向用户发送信息以更改表单。

由于

3 个答案:

答案 0 :(得分:3)

有多种方法可以解决这个问题。

  1. 评论中已经提到了Callback-Constraint。
  2. 创建自己的自定义约束
  3. 使用表达式约束
  4. 可能后者是最容易的。基本上它看起来像这样:

    /**
     * @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:

撰写maxform验证
->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;

     ...............................


}