【发布时间】:2017-03-31 08:36:29
【问题描述】:
我正在尝试在 symfony 3 中创建一个表单。它有一个隐藏字段用于与另一个实体的关系。它被定义为
$builder->add('course', HiddenType::class, array('property_path' => 'course.id'))
这样做时,当我提交表单时出现错误,因为 id 属性不可见并且显然没有设置器。
Could not determine access type for property "id".
我该怎么办?为 id 添加一个 setter 可能是个坏主意。默认情况下没有是有原因的。 id 以外的其他字段不是唯一的,所以我不能使用其中任何一个。
我猜一个选项可能是自定义类型,它查询数据库中的引用实体。但是对于这个非常标准的用例,有没有更简单的方法?
编辑
好吧,显然我的问题被误解了。所以我会解释得更好。这不是关于教义的。我的数据模型很好,该字段是正确的关系,而不是其他东西。问题仅在于 Symfony Form 组件,特别是 HiddenField 默认情况下似乎无法处理关系。首先,它会在显示表单Cannot serialize type Model to string 时导致错误,我可以使用property_path 指令来解决此问题以显示表单。但是一旦提交它就无法创建相关实体,因为它无法设置相关学说实体的 id 属性(参见property_path)。
一个可行的解决方案是使用DataTransformerInterface 类而不是属性路径之类的东西。但是必须为所需的每个实体实施一个。所以我想知道是否有更简单的解决方案,因为在我看来它是一个非常标准的用例。
【问题讨论】:
-
为什么要使用 property_path?字段“课程”应映射到其他实体 - 然后隐藏字段中的值将是该外国实体的 ID。
-
@AndrzejPiszczek 可能这就是我在文档中遗漏的内容。有选择吗?目前我正在使用自定义变压器
-
好吧,那你误会我了。教义联系很好,他们正在工作。我只是不知道表单组件(它正在工作,但我想知道是否有更简单的解决方案)
标签: forms symfony symfony-3.1