Платформа Api: условное добавление группы в контекст сериализации на основе запрошенного элемента ресурса

Я использую API Platform 2.0 с Symfony 3.1.

Я следовал документации WIP для условного добавления групп в контекст сериализации. Для этого я украсил ContextBuilder.

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

Что-то вроде этого:

public function createFromRequest(Request $request, bool $normalization, array $extractedAttributes = null) : array {
/* @var $currentUser User */
$currentUser = $this->tokenStorage->getToken()->getUser();

/* @var $requestedProduct Product */
$requestedProduct = $this->getRequestedItem();

if ($product->getAuthoringOrganization() === $currentUser->getOrganization() {
$context['groups'][] = 'api_products_get_item_current_user_is_owner';
}

return $context;
}

Боюсь, я не могу получить запрошенный элемент / коллекцию в ContextBuilder. Если это так, я был бы очень рад получить совет о том, где строить свои группы сериализации.

В EventListener я могу сделать это, чтобы получить то, что я назвал «$ requiredProduct» здесь:

$subject = $event->getControllerResult())

Большое спасибо за вашу помощь.

Приветствия Бен

2

Решение

Это доступно из атрибутов запроса:

$request->attributes->get('data');

Увидеть https://github.com/api-platform/core/blob/2d252cfe1a188cc0d05c70a78d111b7e54c6d650/src/EventListener/ReadListener.php#L61

0

Другие решения

Других решений пока нет …