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');
我正在使用 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');