Sulu媒体以列表形式显示

3
我创建了一个名为PlayerInfo的实体。在其中,我有照片字段并定义了MediaInterface,并使用它。在adminUI中一切都正常,在前端也是如此。但是当我想在列表中显示缩略图时,我得到了空字段,并在控制台上收到如下错误信息:

Invalid type given: "number". "object" is needed. (转换器错误)

以下是我的列表XML属性代码:
<property name="avatar" visibility="always" translation="sulu_admin.avatar" sortable="false">
    <field-name>id</field-name>
    <entity-name>SuluMediaBundle:Media</entity-name>
    <joins>
        <join>
            <entity-name>SuluMediaBundle:Media</entity-name>
            <field-name>App\Entity\PlayerInfo.photo</field-name>
        </join>
    </joins>

    <transformer type="thumbnails"/>
</property>

可能出了什么问题?

2个回答

4

Sulu列表视图的table适配器使用一个transformer根据API返回的数据来确定应该在单元格内呈现什么。

你在代码中使用了thumbnails转换器。如果你看一下ThumbnailFieldTransformer实现,你会发现这个转换器期望的数据格式是这样的:

{
    "sulu-40x40":"/uploads/media/sulu-40x40/02/2-isle.jpg?v=1-0",
}

我怀疑您已经使用了Sulu的ListBuilder组件在实现API的控制器中收集列表数据(例如类似sulu-demo项目)。ListBuilder组件使用优化查询直接从数据库加载请求的数据。
不幸的是,ListBuilder组件仅返回关联媒体实体的ID,而没有自动将数据转换为ThumbnailFieldTransformer所期望的格式。您需要在控制器中构造并设置包含缩略图URL的对象,并使用MediaManagerInterface::getFormatUrls方法
例如,您可以查看实现Sulu内置组织列表API的AccountController中如何处理组织标志的示例。
$ids = \array_filter(\array_column($accounts, 'logo'));
$logos = $this->mediaManager->getFormatUrls($ids, $locale);
foreach ($accounts as $key => $account) {
    if (\array_key_exists('logo', $account) && $account['logo'] && \array_key_exists($account['logo'], $logos)) {
        $accounts[$key]['logo'] = $logos[$account['logo']];
    }
}

0

你需要在实体中设置图像。

以“用户”实体为例,我认为你有某种属性,比如“头像”。

/**
* @var MediaInterface|null
*/
protected $avatar;

错误发生是因为您只保存了ID。 解决方案是在实体中设置头像。 例如,在控制器中调用列表。
 $media = $this->container->get('sulu.repository.media')->findMediaById($user->getAvatar()->getId());
 $user->setAvatar($media);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接