Drupal 10如何在JSON:API响应中获取媒体图片URL
Drupal 10 媒体图片URL在JSON API中展平输出的解决方案
针对你需要将媒体图片的URL和alt文本展平到JSON API响应中的需求,以下是几种可行的实现方法:
方法一:通过JSON:API Extras 配置实现
这是最简便的无代码方案,调整字段输出规则即可:
- 进入JSON:API Extras配置页面(
/admin/config/services/jsonapi/extras),找到Media Image类型的资源,点击Edit。 - 在Fields标签页,找到
field_media_image字段,点击右侧的Override按钮。 - 若要同时输出
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。
- 第一个子属性:Property path填
- 保存Composite字段后,找到原
field_media_image字段,勾选Exclude隐藏它。
- 点击页面顶部的Add field,选择Composite类型,自定义字段名称(比如
- 保存所有配置,重新请求API即可得到包含
url和alt的嵌套数组结构。
注意:如果仅需要URL,可直接对
field_media_image字段选择Single nested property,Property path填entity.uri.url,但这种方式无法同时返回alt文本。
方法二:自定义模块钩子修改JSON输出
如果JSON:API Extras的配置无法满足复杂需求,可通过自定义模块的钩子修改响应:
- 创建自定义模块(比如
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']); }
- 启用自定义模块,替换代码中的
heor_banner_image_style为你实际使用的图片样式机器名,API响应会自动调整为目标格式。
方法三:通过Views JSON API输出
如果是通过视图提供JSON数据,可按以下步骤配置:
- 创建视图,数据源选择Media,添加筛选条件限制为Image媒体类型。
- 在Fields中添加
Media: Image (field_media_image)和Media: Image alt两个字段:- 对图片字段点击Settings,选择目标图片样式(heor_banner_image_style)。
- 在Format中选择JSON,点击Settings:
- 将图片字段的别名设为
field_media_image.url,alt字段的别名设为field_media_image.alt。 - 确保JSON格式设置为嵌套结构,即可输出符合要求的数组。
- 将图片字段的别名设为
内容的提问来源于stack exchange,提问作者Regokonda
相关产品推荐
相关产品推荐

