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();
}
}
}
}