Symfony 3.4:如何针对不属于绑定到表单的实体的一部分的 "external" 值进行验证

Symfony 3.4: How to validate against an "external" value that's not part of the entity bound to a form

我是 symfony 的新手,我对 PHP 7.

还不是很有经验

我们有一个事件数据库,事件发生后,组织者必须提交报告。

eventreport 是单独的实体 class。 report 除了其 ID 外,对关联的 event 一无所知。

如果报告在事件发生之前提交,验证应该失败。 但是,我不知道如何在验证期间访问 eventeventdate 属性。

我们正在通过注释定义约束,并且 report 实体中已经有一个回调约束。

我什至不确定在哪里可以正确地进行此验证。直接在实体 class 中,在相关表单中 class 甚至在控制器中?

我已经将 eventdate 作为单独的字段注入到表单中,但仍然不知道如何正确访问它以进行验证。

它可以安排为一个两步过程 - 最重要的是,link事件通过它在报告中的 ID 作为学说关联。读取 ID 将读取它所指的事件,然后您将获得数据库记录 - 大概是事件发生的日期。

// in Entity/Report.php
/**
 * One Report has One Event.
 * @OneToOne(targetEntity="Event")
 * @JoinColumn(name="event_id", referencedColumnName="id")
 */
private $event;

此处,数据库有 event_id 列,您从 $report->event(或 ->getEvent())中获取该记录的内容。

然后,如果您当前的报告回调验证,添加另一个检查,以确保事件已经发生 - 如果没有,您添加一个新的违规行为 "you can't make a report on an event that hasn't happened yet."