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

时间:2015-12-08 21:04:32

标签: php forms symfony entity

我的一个实体有一个奇怪的问题。

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

  • 订单(PK)
  • 牌照(PK)
  • 使
  • 模型
  • 变体

在表单上,​​唯一可见的字段是牌照。

在字段之后有一个按钮,其中访问者从ajax调用中获取make / model / variant数据到AjaxController,该AjaxController将数据添加到db。 (有一个$ session' orderId'用于设置'订单'字段)。

我需要绝对确定访问者已经获取了品牌/型号/变体,并且访问者无法更改品牌/型号/变体数据。

如何查看表格提交表格已填写?我可以进行学说检查并将表单设置为“无效”吗?

感谢您的时间。

此致,Lars Hansen

1 个答案:

答案 0 :(得分:0)

一种方法是:

  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 对应于您期望它(如果用户更改 它)&此时使表单无效。