zend-blog-3-backend

Форк
0
/
CountCommentsSubscriber.php 
54 строки · 1.5 Кб
1
<?php
2

3
namespace App\EventSubscriber;
4

5
use App\Event\CommentEvent;
6
use App\Event\DeleteCommentEvent;
7
use Doctrine\DBAL\Driver\Exception as DriverException;
8
use Doctrine\DBAL\Exception as DBALException;
9
use Doctrine\ORM\EntityManagerInterface;
10
use Psr\Log\LoggerInterface;
11
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
12

13
class CountCommentsSubscriber implements EventSubscriberInterface
14
{
15
    private EntityManagerInterface $em;
16

17
    private LoggerInterface $logger;
18

19
    /**
20
     * @param EntityManagerInterface $em
21
     * @param LoggerInterface $logger
22
     */
23
    public function __construct(EntityManagerInterface $em, LoggerInterface $logger)
24
    {
25
        $this->em = $em;
26
        $this->logger = $logger;
27
    }
28

29
    /**
30
     * @param CommentEvent $event
31
     */
32
    public function updateCount(CommentEvent $event): void
33
    {
34
        $comment = $event->getComment();
35

36
        $conn = $this->em->getConnection();
37

38
        try {
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

47
    public static function getSubscribedEvents(): array
48
    {
49
        return [
50
            CommentEvent::class => ['updateCount', 10],
51
            DeleteCommentEvent::class => ['updateCount', 10],
52
        ];
53
    }
54
}
55

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.