gpt4 book ai didi

Symfony2 表单实体到字符串转换器问题

转载 作者:行者123 更新时间:2023-12-02 13:58:11 24 4
gpt4 key购买 nike

我正在使用 Symfony 2.1.3-DEV 并尝试完成将实体转换为字符串(某种 ID),然后在提交表单时从字符串返回到实体。如果我使用食谱中给出的变压器,问题是一样的: http://symfony.com/doc/master/cookbook/form/data_transformers.html

Controller 代码:

$task = $entityManager->find('AcmeTaskBundle:Task', $id);
$form = $this->createForm(new TaskType(), $task); // so $task->issue is Issue object

我收到此错误:

The form's view data is expected to be an instance of class Acme\TaskBundle\Entity\Issue, but is a(n) string. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) string to an instance of Acme\TaskBundle\Entity\Issue.

问题是,我已经有一个变压器,可以将 TO 字符串转换。

来自Form.php:

if (null !== $dataClass && !$viewData instanceof $dataClass) {
throw new FormException(
//...
);
}

为什么 $viewData 被检查为 data_class 参数的实例(或给定对象的猜测类型)? View 数据不应该是字符串/数组等吗?我错过了什么吗?

最佳答案

经过一步一步的挖掘,我发现了我面临的问题。

查看数据确实必须是data_class参数指定的类的实例。如果您使用转换器对象 -> 字符串,则必须将 data_class 参数设置为 null

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => null,
));
}

默认情况下,data_class是指定初始数据的get_class的结果。如果您将对象传递给 Controller ​​的 createForm 或某些相应的表单创建器函数,并且 data_class 不存在默认值,它将被设置为给定对象的类。

尽管如此,文档中给出的示例仍然可以正常工作 - 如果表单位于内部(在另一个表单内),则不会设置 data_class,因此它将为 null

由于很少只从一个字段(在我的变压器案例中为文本字段)制作表单,因此带有变压器的表单通常会位于其他表单内,因此它可以正常工作。

关于Symfony2 表单实体到字符串转换器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com