Перейти к основному содержимому

Работа с сессиями

Если вам необходимо использовать сессии, пожалуйста, используйте стандартные механизмы работы с сессиями, предоставляемые Symfony (настраиваются через конфигурацию framework.session). Подробную информацию можно найти в документации Symfony по сессиям.

В случае, если вам нужно добавить собственное хранилище сессий (session bag) для вашего бандла или приложения, необходимо реализовать слушатель событий (EventListener), чтобы зарегистрировать его до запуска сессии.

Регистрация настраиваемого Session Bag (хранилища сессии)

<?php  

namespace TestBundle\EventListener;

use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

class SessionBagListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
//Выполняется после Symfony\Component\HttpKernel\EventListener\SessionListener
KernelEvents::REQUEST => ['onKernelRequest', 127],
];
}

public function onKernelRequest(RequestEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}

if ($event->getRequest()->attributes->get('_stateless', false)) {
return;
}

$session = $event->getRequest()->getSession();

//не регистрируем, если сессия уже запущена
if ($session->isStarted()) {
return;
}

$bag = new AttributeBag('_session_cart');
$bag->setName('session_cart');

$session->registerBag($bag);
}
}

Использование настроенной сессии (например, в контроллере)

<?php  
if ($request->hasSession()) {
$session = $request->getSession();

/** @var AttributeBag $bag */
$bag = $session->getBag('session_cart');
$bag->set('foo', 1);
}

Сессия Symfony-фреймворка настроена в Pimcore по умолчанию, поэтому вам не нужно вручную прописывать конфигурацию сессии в вашем config.yaml.

Для работы с сессиями административной части можно использовать метод Pimcore\Tool\Session::getReadonly(), который возвращает объект AttributeBagInterface.


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.