Мне нужно удалить объект ресурса (в данном случае абзац) из ответа JSON:API, когда он соответствует определенному условию. Я не хочу его удалять, я просто хочу исключить объект из ответа.
Подход:
Я попытался использовать FieldEnhancer для доступа к объекту ресурса в «doUndoTransform()», проверить условие и пропустить/удалить его перед отображением.
Проблема:
Пока мне удалось только изменить данные моего объекта ресурсов. Я могу манипулировать его содержимым, но я еще не понял, как исключить его из вывода.
Вопрос:
Есть ли способ или, возможно, альтернатива (подходу FieldEnhancer) для достижения моей цели? Я думал о расширении схемы в «getOutputJsonSchema()», но из-за отсутствия документации я упускаю возможные варианты.
Настраивать:
Статья (узел) | Список (абзац) | Предметы | Элемент (абзац, содержащий мою пользовательскую группу полей с критериями) (см. ниже)
Мой FieldEnhancer подключен к Список перебирая каждый Предмет в Предметы для получения идентификатора объекта и условия. Пользовательская FieldGroup, которая содержит условие, может быть присоединена к любому объекту, поэтому использование FieldEnhancer для определенного ресурса также выполняется довольно быстро.
Пример кода FieldEnhancer:
/**
* {@inheritdoc}
*/
защищенная функция doUndoTransform($data, Context $context): смешанная
{
$entityId = $this->getEntityId($context);
// если все в порядке отображаем объект
если ($this->fieldGroupProcessor->isCondition($entityId)) {
вернуть $данные;
}
// иначе вернуть null/пропустить/удалить объект
}
публичная функция getOutputJsonSchema(): массив
{
возвращаться [
'тип' => 'объект',
'свойства' => [],
];
}
Пример объекта ресурса JSON:API:
{
type: "абзац--быстрые ссылки",
идентификатор: "3eabd16d-92a5-468d-9968-ad7e24797340",
ссылки: {
себя: {
href: "http://127.0.0.1:8088/jsonapi/paragraph/quicklinks/3eabd16d-92a5-468d-9968-ad7e24797340"
}
},
атрибуты: {
рубрика: "Тест"
},
отношения: {
quicklinks_items: {
данные: [{
тип: "абзац -- quicklink_item",
идентификатор: "af04ef25-bee5-401d-b5f7-1bf742349dde",
мета: {
target_revision_id: 230829,
drupal_internal__target_id: 36089
}
},
{
тип: "абзац -- quicklink_item",
идентификатор: "0831315b-f6bd-46a4-87bf-feff5c9473bc",
мета: {
target_revision_id: 230831,
drupal_internal__target_id: 36091
}
},
{
тип: "абзац -- quicklink_item",
идентификатор: "53b2a7d2-4388-4e5f-8681-a91cbe0e07c7",
мета: {
target_revision_id: 230833,
drupal_internal__target_id: 36301
}
}],
ссылки: {
связанные с: {
href: "http://127.0.0.1:8088/jsonapi/paragraph/quicklinks/3eabd16d-92a5-468d-9968-ad7e24797340/quicklinks_items"
},
себя: {
href: "http://127.0.0.1:8088/jsonapi/paragraph/quicklinks/3eabd16d-92a5-468d-9968-ad7e24797340/relationships/quicklinks_items"
}
}
}
}
},