【问题标题】:Constraints in SymfonySymfony 中的约束
【发布时间】:2017-07-13 15:19:26
【问题描述】:

我有一个名为 Student 的类,它具有 StartDate 和 EndDate。我想添加一个\@Assert(),它验证 StartDate 始终在 EndDate 之前。这就是我所拥有的,但错误消息没有被执行。这可以通过其他方式完成吗?

/**
 * @var \DateTime
 *
 * @ORM\Column(name="startDate", type="datetime", nullable=false)
 * @Assert\Type("DateTime")
 */
private $startdate;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="endDate", type="datetime", nullable=false)
 * @Assert\Type("DateTime")
 * @Assert\Expression("this.getStartDate() < this.getEndDate()",
 * message="The end date must be after the start date")
 *
 * 
 */
private $enddate;

【问题讨论】:

    标签: symfony validation doctrine-orm constraints assert


    【解决方案1】:

    你可以使用一个简单的回调:

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="startDate", type="datetime", nullable=false)
     * @Assert\Type("DateTime")
     */
    private $startdate;
    
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="endDate", type="datetime", nullable=false)
     * @Assert\Type("DateTime")
     * message="The end date must be after the start date")
     *
     * 
     */
    private $enddate;
    
    /**
     * @Assert\Callback
     */
    public function validateDate(ExecutionContextInterface $context, $payload)
    {
         if ($this->startdate > $this->enddate) {
            $context->buildViolation('Start date has to be befor end date')
                ->atPath('startdate')
                ->addViolation();
        }
    }
    

    详情请参阅https://symfony.com/doc/current/reference/constraints/Callback.html

    【讨论】:

      【解决方案2】:

      不知道您是否可以在注释中做到这一点,但您可以使用类验证器来做到这一点,您可以在其中访问实体的所有数据并进行比较

      http://symfony.com/doc/current/validation/custom_constraint.html#class-constraint-validator

      【讨论】:

      • 是的,或者您可以创建一个自定义验证约束来获取其他值
      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多