以编程方式触发实体验证

Trigger entity validation programmatically

问题很简单

我有一个带有验证约束的实体。

我也有一个服务可以创建这样的实体。

问题是,它不会像 @Assert\Expression 那样触发验证。见下文。

这是一个巨大的失败。请问如何以编程方式触发此类验证?

我需要根据 Booking class 定义中定义的所有约束自动验证 Booking 实例。

<?php

namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass="App\Repository\BookingRepository")
 */
class Booking
{

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Slot", inversedBy="bookings")
     * @Groups({"booking"})
     * @ORM\JoinColumn(nullable=true)
     * @Assert\Expression(
     *     "value == null or (value.getStatus() == constant('App\Entity\Slot::STATUS_ACTIVE'))",
     *     message="Vous ne pouvez pas réserver cette date."
     * )
     */
    private $slotId;
}

您需要使用 Symfony (documentation about the Validator component) 的 validator 服务。

对服务中新创建的实体调用 validate 方法。