【问题标题】:Symfony 4 Validation on whole EntitySymfony 4 对整个实体的验证
【发布时间】:2019-12-06 01:01:55
【问题描述】:

所以,我需要对体育俱乐部的预订进行验证。 预订有开始和结束日期时间,您可以预订 1 个或多个表。

所以实体看起来像

class Reservation
{
    use TimestampAble;

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="reservations")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Table", inversedBy="reservations")
     */
    private $tables;

    /**
     * @ORM\Column(type="datetime")
     */
    private $start;

    /**
     * @ORM\Column(type="datetime")
     */
    private $end;

    ...
}

(不要担心实体“Table” - 它的 db 表名为“snooker_table”;))

现在我需要验证,在请求表的请求时间范围内,不存在其他预订。 这让我很头疼……

我知道我可以在控制器操作中“手动”创建/更新。但我也在使用 Symfonys Easy-Admin,所以我也需要把代码放在那里。 我考虑过将验证作为注释直接放入实体中。但我不知道在哪里......如果我把它放在“$tables”上,我只会得到一个没有所需开始和结束日期时间的 ArrayCollection。而且它也不是一个独特的实体(因为我需要继续进行一系列日期时间等等)。

那么:任何想法如何直接在实体中实现这一点?或者至少是表单类型(为了便于管理,我稍后会关心)?

提前致谢。

【问题讨论】:

  • 您是否尝试过创建custom constraint
  • 好吧,约束本身并不是什么大问题。但是放在哪里...
  • 和代码本身一样?还是在Reservation 实体中?最后一节深入探讨类验证而不是属性验证。

标签: php symfony validation doctrine symfony4


【解决方案1】:

好的,我就这样处理:Symfony 2 UniqueEntity repositoryMethod fails on Update Entity

创建用于验证的存储库方法(不是约束)并将其用于整个实体本身的 UniqueEntity 约束。感觉有点脏,不过还好。。。 希望这也适用于简单的管理。

【讨论】:

  • 你也必须创建一个约束。在您自定义约束中,您可以使用存储库来查找约束是否失败
  • UniqueEntity 是约束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多