cacheItemPool->getItem($key); if ($item->isHit()) { return $item->get(); } $nb = $this->getCountUnreadByUser($u); $item->set($nb) ->expiresAfter(60 * 15); $this->cacheItemPool->save($item); return $nb; } public static function generateCacheKeyWorkflowByUser(User $user): string { return 'chill_main_workflow_by_u_'.$user->getId(); } public function getCountUnreadByUser(User $user): int { return $this->workflowStepRepository->countUnreadByUser($user); } public static function getSubscribedEvents() { return [ 'workflow.leave' => 'resetWorkflowCache', ]; } public function resetWorkflowCache(Event $event): void { if (!$event->getSubject() instanceof EntityWorkflow) { return; } /** @var EntityWorkflow $entityWorkflow */ $entityWorkflow = $event->getSubject(); $step = $entityWorkflow->getCurrentStep(); if (null === $step) { return; } $keys = []; foreach ($step->getDestUser() as $user) { $keys[] = self::generateCacheKeyWorkflowByUser($user); } foreach ($step->getDestUserGroups()->reduce( function (array $accumulator, UserGroup $userGroup) { foreach ($userGroup->getUsers() as $user) { $accumulator[] = $user; } return $accumulator; }, [] ) as $user) { $keys[] = self::generateCacheKeyWorkflowByUser($user); } if ([] !== $keys) { $this->cacheItemPool->deleteItems($keys); } } }