我有这个奇怪的问题,这里是我的自定义ThingType类的示例用法。Symfony自定义窗体奇怪的属性访问错误
->add('photos', 'namespace\Form\Type\ThingType', [
'required' => false,
])
如果字段名称是photos
一切正常,但如果我改变我的实体领域,让我们说photosi
,运行产生的实体,并更改表单字段名,这个错误被抛出:
既不是属性“photosi”也不是方法 “addPhotosus()”/“removePhotosus()”,“setPhotosi()”,“photosi()”, “__set()”或“__call()”存在并在类别 “AppBundle \ Entity \ Product”中公开访问。
我想问题来自Symfony试图为我的实体生成getter方法名称。为什么这个addPhotosus
方法名称生成?我该如何解决这个问题?
编辑:
我使用的变压器模型显示数据时给用户。
$builder->addModelTransformer(new CallbackTransformer(
function ($imagesAsText) {
if (!$imagesAsText) {
return null;
}
$newImages = [];
foreach($imagesAsText as $img) {
$newImages[] = $img->getID();
}
return implode(',', $newImages);
},
function ($textAsImages) use ($repo) {
$images = [];
foreach(explode(',', $textAsImages) as $imgID) {
$img = $repo->findOneById($imgID);
if ($img) {
$images[] = $img;
}
}
return $images;
}
));
实际字段是TextType :: class,其中包含实体ID,例如1,10,32,51
。模型转换器将这些数据转换为实体。将'data_class'设置为我的表单类型似乎不相关,因为实际的表单类型是实体的一部分。我的意思是我有Product
实体和Photo
实体,photos
是photo
实体的数组。所以在我的ThingType中,我应该使用什么data_class
,photo
或product
?
由于
如果您希望此子不是mappe,则可以添加'mapped'=> false。 – Alsatian
我使用TextType :: class来保存由modelTransformer转换的实体数组,当我尝试设置'data_class'时出现此错误'表单的视图数据应该是类AppBundle \ Entity \ Product的一个实例,但是(n)字符串' – nacholibre
@nacholibre也许你应该用一些代码来更新你的问题,或者做一个新的问题,因为它跟这个线程问题没有任何关系。 – abdiel