У меня странная проблема в symfony 4.3 (также проверял ее в 4.2 - то же поведение) - я использую EventListener для обработки запроса - вот код:
<?php
namespace App\EventListener;
use App\Entity\Company;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
class ShopListener implements EventSubscriberInterface
{
/** @var EntityManagerInterface */
protected $em;
/** @var Environment */
protected $twig;
public function __construct(EntityManagerInterface $entityManager, Environment $twig)
{
$this->em=$entityManager;
$this->twig=$twig;
}
public function onKernelRequest(RequestEvent $event)
{
if($event->isMasterRequest()===false) {
return;
}
/** @var Request $request */
$request=$event->getRequest();
$subDomain=$request->attributes->get('domain');
if($subDomain===null) {
return;
}
$company=$this->em->getRepository(Company::class)->findOneBy([
'subDomain' => $subDomain,
]);
if($company instanceof Company && $company->shopIsOnline()) {
$request->attributes->set('company',$company);
return;
}
$event->setResponse(
new Response($this->twig->render('page/shop_not_found.html.twig'),404)
);
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest',0],
];
}
}
После регистрации этого слушателя,$request->getSession()
всегда null
в моем контроллере (панель инструментов также замечает, что сеанс не зарегистрирован).При отмене регистрации сеанс существует, но логика в слушателе пропускается.Я попытался поиграть с приоритетом, чтобы убедиться, что нет другого слушателя, который мешает.Кажется, что уже регистрация этого события убивает сеанс (даже если onKernelRequest пуст), что трудно поверить.Чего мне не хватает?