【问题标题】:How to update a StatisticEntity on each PUT request to API Plateform如何在对 API 平台的每个 PUT 请求上更新统计实体
【发布时间】:2023-02-10 17:56:34
【问题描述】:

我在 API 平台上有 3 个实体(下面设置架构)。

我的目标是在对评论的每个 PUT、POST 或 DELETE 请求中,有关 mainObject 的链接统计信息都会增加。

有谁知道一个优雅的解决方案?

mainObject(项目评级)

  • 身份证,整型 UUID
  • 标题,字符
  • 类型,整数
  • 年,整数
  • 用户,内部关键用户
  • 已创建,日期

mainObjectStats(关于每个 mainObjects 项目一对一的统计信息)

  • 身份证,整数 UUID
  • 主要对象 ID,int KEY 主对象
  • 计数评论,字符
  • countTotalRatingsStar,整数

评论(每个 mainObject 的多对一评论)

  • 身份证,整数 UUID
  • 主要对象 ID,int KEY 主对象
  • 用户ID,内部关键用户
  • 身体,字符
  • 评分
  • 已创建,日期

我尝试编写自定义 Normalizer,但无法达到预期结果。

我想要的是:

  1. 有人评价一个主要对象
  2. 关于 mainObject 的统计数据自动更新
  3. 这样我就可以显示统计数据,而无需获取所有评论并对其进行分组

【问题讨论】:

    标签: php symfony doctrine api-platform.com


    【解决方案1】:

    您正在寻找事件订阅者。 https://api-platform.com/docs/core/events/

    这是一个例子:

    final class mainObjectSubscriber implements EventSubscriberInterface
    {
    
    
        public static function getSubscribedEvents(): array
        {
             // Add all events you want to track here
            return [
                KernelEvents::VIEW => [
                    'changeStats', EventPriorities::POST_VALIDATE
                ],
            ];
        }
    
        public function changeStats(ViewEvent $event)
        {
            $mainObject = $event->getControllerResult();
            $method = $event->getRequest()->getMethod();
            $apiOperationName = $event->getRequest()->get('_api_operation_name');
    
            // Change this if according to which operation you want to track, remove operation name control if needed
    
            if (!($mainObject instanceof MainObject) || Request::METHOD_POST !== $method && $apiOperationName !== MainObject::API_OPERATION_MAINOBJECT_ADD) {
                return;
            }
    
            // Do your logic here
        }
    }
    

    小心 !($mainObject instanceof MainObject) 因为这个 !$mainObject instanceof MainObject 在 apiplatform 文档中并且是错误的

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      相关资源
      最近更新 更多