Рейтинг:1

JSON:API FieldEnhancers — удаление объекта ресурса из ответа JSON:API

флаг de

Мне нужно удалить объект ресурса (в данном случае абзац) из ответа 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"
            }
        }
    }
}

},

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.