0

我有两个实体:产品和类别(Symfony 2.3)。

我想创建一个表单,用户可以通过首先选择类别来选择产品。用户通过单击图像选择类别,然后我想将图像的值设置为隐藏输入,但我不知道如何将外部实体选择列表更改为隐藏输入(http://symfony.com /doc/current/reference/forms/types/entity.html)。

  1. 我怎样才能做到这一点?(如何将表单输入更改为隐藏)
  2. 如果我将级联验证设置为 true,它是否会检查一个类别是否真的存在。(防止恶意用户将不存在类别的产品放入其中) ?
4

1 回答 1

2

第1部分

为此,您需要使用数据转换器来做两件事:

  • 将实体转换为字符串或整数的标识符,以便表单可以将其呈现为隐藏字段。
  • 在提交表单时将字符串或整数标识符转换为实体,以便可以以正确的关系保存父实体

我在上面链接到的 symfony 文档(这里也是)实际上是通过一个完整的示例来使用带有表单的数据转换器。

作为一个无耻的插件(因为我相信它很有帮助)我写了一个关于使用数据转换器的小教程,用于具有实体 id 的隐藏字段:http: //lrotherfield.com/blog/symfony2-forms-entity-as-隐藏场/

第2部分

如果您使用的是数据转换器,那么您无需担心恶意用户。数据转换器将失败,因为它无法从假 id 反向转换类别。在我的教程中,transformer 会抛出Symfony\Component\Form\Exception\TransformationFailedException异常。

如果您希望在表单中显示错误,您也可以编写一个验证器(可能使用回调)来检查提交的类别是否真实。Doctrine 不允许您保留虚假的类别关系,因为外键约束将失败。

于 2013-07-03T13:45:03.703 回答