微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sulu 媒体显示在列表中

如何解决Sulu 媒体显示在列表中

我创建了一个实体 PlayerInfo。在其中,我有照片字段并定义了 MediaInterface,并将其与它一起使用。在 adminUI 中,一切都显示正常,在 Frontend 中也是如此,但是当我想在列表中显示缩略图时,我得到了空字段,并在控制台中显示错误

给定的类型无效:“数字”。需要“对象”。 (变压器错误

这是我的列表 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>

可能是什么问题?

解决方法

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

您在代码中使用了 thumbnails 转换器。如果您查看 ThumbnailFieldTransformer implementation,您会看到转换器需要以下格式的数据:

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

我怀疑您已使用 Sulu 的 ListBuilder 组件在实现您的 API(如 sulu-demo project)的控制器中收集该列表数据。 ListBuilder 组件使用优化查询直接从数据库加载请求的数据。

遗憾的是,ListBuilder 组件仅返回关联媒体实体的 ID,并不会自动将数据转换为 ThumbnailFieldTransformer 期望的格式。您需要使用 MediaManagerInterface::getFormatUrls method 在控制器中构造和设置包含缩略图网址的对象。

举个例子,你可以看看organization logo is handled in the AccountController是如何实现Sulu内置组织列表的API的:

$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']];
    }
}
,

您必须在实体中设置图像。

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

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

发生错误是因为您只保存了 ID。 解决办法是之前在Entity中设置头像。 例如在您调用列表的控制器中。

 $media = $this->container->get('sulu.repository.media')->findMediaById($user->getAvatar()->getId());
 $user->setAvatar($media);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。