zend-blog-3-backend
54 строки · 1.5 Кб
1<?php
2
3namespace App\EventSubscriber;
4
5use App\Event\CommentEvent;
6use App\Event\DeleteCommentEvent;
7use Doctrine\DBAL\Driver\Exception as DriverException;
8use Doctrine\DBAL\Exception as DBALException;
9use Doctrine\ORM\EntityManagerInterface;
10use Psr\Log\LoggerInterface;
11use Symfony\Component\EventDispatcher\EventSubscriberInterface;
12
13class CountCommentsSubscriber implements EventSubscriberInterface
14{
15private EntityManagerInterface $em;
16
17private LoggerInterface $logger;
18
19/**
20* @param EntityManagerInterface $em
21* @param LoggerInterface $logger
22*/
23public function __construct(EntityManagerInterface $em, LoggerInterface $logger)
24{
25$this->em = $em;
26$this->logger = $logger;
27}
28
29/**
30* @param CommentEvent $event
31*/
32public function updateCount(CommentEvent $event): void
33{
34$comment = $event->getComment();
35
36$conn = $this->em->getConnection();
37
38try {
39$stmt = $conn->prepare('CALL update_comments_count(:postId)');
40$stmt->bindValue('postId', $comment->getPost()->getId());
41$stmt->executeQuery();
42} catch (DriverException|DBALException $e) {
43$this->logger->error('update comment count error', ['exception' => $e]);
44}
45}
46
47public static function getSubscribedEvents(): array
48{
49return [
50CommentEvent::class => ['updateCount', 10],
51DeleteCommentEvent::class => ['updateCount', 10],
52];
53}
54}
55