Api 平台:根据请求的资源项有条件地将组添加到序列化上下文

Api Platform: Conditionally adding group to serialization context based on requested resource item

我正在使用 API 平台 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 中,我可以这样做以获得我在这里称为“$requestedProduct”的内容:

$subject = $event->getControllerResult()) 

非常感谢您的帮助。

干杯本

可从请求属性中获得:

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

https://github.com/api-platform/core/blob/2d252cfe1a188cc0d05c70a78d111b7e54c6d650/src/EventListener/ReadListener.php#L61