Symfony 4-表格最大验证



如何确保最低<最大验证之前

这里我的实体

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

这是一个选择,最小必须比最大较低,然后才能验证表格

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

谢谢

有多种方法可以想到。

  1. 评论中已经提到了回调。
  2. 创建自己的自定义约束
  3. 使用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中编写minmax验证。

->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;
     ...............................

}

最新更新