Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony中的约束_Symfony_Validation_Doctrine Orm_Constraints_Assert - Fatal编程技术网

Symfony中的约束

Symfony中的约束,symfony,validation,doctrine-orm,constraints,assert,Symfony,Validation,Doctrine Orm,Constraints,Assert,我有一个班叫Student,有开始日期和结束日期。我想添加一个\@Assert(),用于验证StartDate始终在EndDate之前。这就是我所知道的,但是错误消息没有被执行。这可以通过另一种方式实现吗 /** * @var \DateTime * * @ORM\Column(name="startDate", type="datetime", nullable=false) * @Assert\Type("DateTime") */ private $startdate; /**

我有一个班叫Student,有开始日期和结束日期。我想添加一个
\@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;
/**
*@var\DateTime
*
*@ORM\Column(name=“startDate”,type=“datetime”,nullable=false)
*@Assert\Type(“日期时间”)
*/
私人$startdate;
/**
*@var\DateTime
*
*@ORM\Column(name=“endDate”,type=“datetime”,nullable=false)
*@Assert\Type(“日期时间”)
*@Assert\Expression(“this.getStartDate()
不知道是否可以在anotation中完成,但可以使用类验证器完成,在类验证器中可以访问实体的所有数据并进行比较


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

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

有关详细信息,请参阅。

是的,或者您可以创建一个自定义的验证约束来获取其他值