Sonata管理员自动从属验证

时间:2018-08-22 10:59:31

标签: sonata-admin symfony-sonata symfony-3.4

我有一个表单,该表单的字段名为“ title”,我不希望在表单上完全不显示实体的“ slug”属性,但我想验证基于标题生成的slug是独特。

我在管理员的“ preValidate()”函数中生成了子弹,并且由于实体的注释而进行了唯一性测试,这很好,但是:

由于表单上没有任何子字段,因此错误仅位于顶部(甚至没有提及该字段的名称),这是毫无用处的。

因此,我想将该错误绑定到我的标题字段,或者显示一个只读的Slug字段。我发现后者似乎更容易,因此我使用默认的空字符串值添加了该字段,问题是,即使在表单提交和错误消息之后,该段子字段仍为空字符串,尽管其值为“ asd- asd-asd”在背景中。

在设置该段之前和之后,我已经在admin的preValidate()期间转储了$ this-> getForm(),并且可以看到“ modelData,normData和viewData”中的所有内容都发生了变化。 就我所知,该表单应基于viewData显示字段,所以我不理解。

我认为也许如果我调用$ form-> handle($ request),它会起作用,但是它说它已经被调用。
我以为也许可以对symfony的pre Submit事件做些事,但是后来我发现我需要admin的uniqid来访问请求的表单数据,并且无法将admin注入到侦听器中。
我还尝试过在控制器的preCreate()中设置该子弹,但也没有成功。

如何根据请求填充表单字段的值?
(或者为什么不向用户显示?)

0 个答案:

没有答案