symfony隐藏字段,但对其进行验证


symfony hide fields but validate on them

我的一个实体出现了一个奇怪的问题。

我的车辆实体具有以下数据库表字段:

  • 订单(PK)
  • 许可证发放日期
  • 制造
  • 模型
  • 变体

在表单上,唯一可见的字段是licenseplate。

在字段后面有一个按钮,访问者可以在其中从对AjaxController的ajax调用中获取make/model/variant数据,AjaxController将数据添加到数据库中。(有一个设置"订单"字段的$session"orderId")。

我需要绝对确定访问者已经获取了make/model/variant,并且访问者不能更改make/model/variant数据。

我如何在提交的表格上检查车辆表是否已填写?我可以进行条令检查并将表格设置为"无效"吗?

谢谢你抽出时间。

致问候,Lars Hansen

一种方法是:

  1. 从表单中删除品牌、型号和变体。如果你不希望用户可能更改它们,而你又将它们保存在其他地方,那么拥有它们是没有意义的
  2. 在表单中添加一个隐藏的、未映射的字段,例如"dataFetched"
  3. 当通过ajax成功获取/保存汽车数据时,将此字段设置为checked/true
  4. 通过javascript,在选中dataFetched字段之前不允许表单提交
  5. 在PRE_SUBMIT侦听器中,检查dataFetched是否为true,如果不是,则使表单无效(因为JS检查本身是不够的)。有关侦听器示例,请参阅symfony标准包中的CsrfValidationListener。(我使用的是2.3,但我认为它在新版本中仍然存在)
  6. 可选如果您想在表单中保留make/model/variant。在监听器中,您也可以检查make/model/variant与您期望的相对应(以防用户更改it)&此时表格无效