我的 symfony 项目中有两个相关实体 - 使用 Doctrine 存储。一个实体是“广告商”,它具有 ID 和名称。导致问题的另一个实体是“报告”,它有一个自己的 id 以及一个名为“advertiser_id”的字段。
在 Symfony 表单中添加广告商报告时,我使用 EntityType 作为advertiser_id 字段,以便可以显示选定的广告商。该部分工作得很好,但是当我尝试提交表单时,我收到错误,因为它将 Advertiser 对象而不是广告商的 id 传递到advertiser_id 字段。
这是我的表单构建器中的内容:
$builder
->add('advertiser_id', EntityType::class, [
'class' => Advertiser::class,
'query_builder' => $this->advertiserRepository->findAllNotDeletedUnpaginated(),
'choice_label' => 'name',
])
->add('submit', SubmitType::class, [
'label' => 'Submit',
])
;
当我提交表单时,我收到此错误:
预期参数类型为“integer”,给出“App\Entity\Advertiser”。
关于如何强制 symfony 只尝试保存所选广告商的 ID,而不是传递整个广告商,有什么想法吗?
更新:现在我已经重构了它,以便广告商成为要报告的相关实体,我正在尝试找出如何使广告商成为隐藏字段并且无处可去。
我已经尝试了前面提到的 iiirxs 与回调变压器的代码 - 将 'advertiser_id' 更改为 'advertiser' - 但我没有运气。我一直在读这样的帖子Symfony hideType 使用 data_class 作为实体而不是转换器 https://stackoverflow.com/questions/35640543/symfony-hiddentype-using-data-class-for-entity-instead-of-transformer,但我在获取“广告商”的值时遇到了困难,就像他们在该示例中获取 $options['selected_course'] 的方式一样。
当我尝试(出于测试目的)为广告商硬编码值 1,然后将其放在表单上时,表单会显示,但在提交时出现错误:
$advertiser=1;
$builder
->add('advertiser', HiddenType::class,['data' => $advertiser, 'data_class' => null])
我在提交表单时收到的错误是:
预期参数类型为“App\Entity\Advertiser 或 null”,给定“string”。
我很抱歉在这件事上白费力气。这看起来应该是一件很常见/容易做的事情,但我很难找到如何使它成为一个隐藏字段。任何想法将不胜感激!