[EC-CUBE 4] カートの永続化を無効にする

[EC-CUBE 4] カートの永続化を無効にする

EC-CUBEの標準機能でカートに商品を入れたままログアウトして、再度ログインするとカートの情報が復元する機能(カートの永続化)がありますが、それを無効化するコード例です。

<?php

namespace Customize\Security\Http\Authentication;

use Doctrine\ORM\EntityManagerInterface;
use Eccube\Entity\Cart;
use Eccube\Repository\CartRepository;
use Eccube\Request\Context;
use Eccube\Security\Http\Authentication\EccubeLogoutSuccessHandler;
use Symfony\Component\Security\Http\Event\LogoutEvent;

class LogoutSuccessHandler extends EccubeLogoutSuccessHandler
{
    public function __construct(
        Context $context
    ) {
        parent::__construct($context);
    }

    public function onLogout(LogoutEvent $event): void
    {
        global $kernel;
        $container = $kernel->getContainer();

        if($this->context->isFront()) {
            /** @var EntityManagerInterface $entityManager */
            $entityManager = $container->get('doctrine')->getManager();

            $token = $event->getToken();

            if ($token) {
                /** @var CartRepository $cartRepository */
                $cartRepository = $entityManager->getRepository(Cart::class);
                $Carts = $cartRepository->findBy(['Customer' => $token->getUser()]);
                foreach ($Carts as $Cart) {
                    $cartRepository->delete($Cart);
                }
                $entityManager->flush();
            }
        }
    }
}