You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 10如何在JSON:API响应中获取媒体图片URL

Drupal 10 媒体图片URL在JSON API中展平输出的解决方案

针对你需要将媒体图片的URL和alt文本展平到JSON API响应中的需求,以下是几种可行的实现方法:

方法一:通过JSON:API Extras 配置实现

这是最简便的无代码方案,调整字段输出规则即可:

  1. 进入JSON:API Extras配置页面(/admin/config/services/jsonapi/extras),找到Media Image类型的资源,点击Edit。
  2. 在Fields标签页,找到field_media_image字段,点击右侧的Override按钮。
  3. 若要同时输出url和alt,需使用Composite field:
    • 点击页面顶部的Add field,选择Composite类型,自定义字段名称(比如field_media_image_data)。
    • 在Composite字段配置中,添加两个子属性:
      • 第一个子属性:Property path填field_media_image.entity.uri.url,别名设为url。
      • 第二个子属性:Property path填field_media_image.alt,别名设为alt。
    • 保存Composite字段后,找到原field_media_image字段,勾选Exclude隐藏它。
  4. 保存所有配置,重新请求API即可得到包含url和alt的嵌套数组结构。

注意:如果仅需要URL,可直接对field_media_image字段选择Single nested property,Property path填entity.uri.url,但这种方式无法同时返回alt文本。

方法二:自定义模块钩子修改JSON输出

如果JSON:API Extras的配置无法满足复杂需求,可通过自定义模块的钩子修改响应:

  1. 创建自定义模块(比如custom_json_media),在模块的.module文件中添加以下代码:
use Drupal\jsonapi\JsonApiResource\ResourceObject;
use Drupal\jsonapi\JsonApiResource\ResourceObjectData;

/**
 * Implements hook_jsonapi_resource_object_render_alter().
 */
function custom_json_media_jsonapi_resource_object_render_alter(array &$rendered, ResourceObject $resource_object, ResourceObjectData $data) {
  // 仅处理媒体图片类型的资源
  if ($resource_object->getResourceType()->getEntityTypeId() !== 'media' || $resource_object->getResourceType()->getBundle() !== 'image') {
    return;
  }

  $media_entity = $resource_object->getEntity();
  $image_field = $media_entity->get('field_media_image')->first();
  if (!$image_field) {
    return;
  }

  // 获取指定样式的图片URL
  $image_style = \Drupal::entityTypeManager()->getStorage('image_style')->load('heor_banner_image_style');
  $image_url = $image_style ? $image_style->buildUrl($image_field->entity->getFileUri()) : $image_field->entity->createFileUrl();

  // 替换attributes中的字段结构
  $rendered['attributes']['field_media_image'] = [
    [
      'url' => $image_url,
      'alt' => $image_field->alt,
    ]
  ];

  // 移除原有的关联字段(如果存在)
  unset($rendered['relationships']['field_media_image']);
}
  1. 启用自定义模块,替换代码中的heor_banner_image_style为你实际使用的图片样式机器名,API响应会自动调整为目标格式。

方法三:通过Views JSON API输出

如果是通过视图提供JSON数据,可按以下步骤配置:

  1. 创建视图,数据源选择Media,添加筛选条件限制为Image媒体类型。
  2. 在Fields中添加Media: Image (field_media_image)和Media: Image alt两个字段:
    • 对图片字段点击Settings,选择目标图片样式(heor_banner_image_style)。
  3. 在Format中选择JSON,点击Settings:
    • 将图片字段的别名设为field_media_image.url,alt字段的别名设为field_media_image.alt。
    • 确保JSON格式设置为嵌套结构,即可输出符合要求的数组。

内容的提问来源于stack exchange,提问作者Regokonda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:36:11