Кто-нибудь знает, как получить доступ к переменной сеанса в службе?
У меня есть служба, с которой я передаю контейнер. Я могу получить доступ к таким вещам, как служба Doctrine, используя:
// Get the doctrine service $doctrine_service = $this->container->get('doctrine'); // Get the entity manager $em = $doctrine_service->getEntityManager();
Однако я не уверен, как получить доступ к сеансу.
В контроллере сеанс можно получить, используя:
$session = $this->getRequest()->getSession(); $session->set('foo', 'bar'); $foo = $session->get('foo');
Является ли сессия частью службы, и если да, то что называется службой.
Любая помощь могла бы быть полезна.
php app/console container:debug
показывает, что служба session
является экземпляром класса Symfony\Component\HttpFoundation\Session
, поэтому вы можете получить сеанс с таким именем:
$session = $this->container->get('session');
После того, как вы выполнили свою работу в сеансе, вызовите $session->save();
чтобы написать все на сеанс. Кстати, есть еще две службы, связанные с сеансом, которые также отображаются в моем контейнере:
session.storage
instanceof Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage
session_listener
instanceof Symfony\Bundle\FrameworkBundle\EventListener\SessionListener
Если вы не хотите проходить во всем контейнере, вы просто передаете @session в аргументах:
services.yml
my.service: class: MyApp\Service arguments: ['@session']
Service.php
use Symfony\Component\HttpFoundation\Session\Session; class Service { private $session; public function __construct(Session $session) { $this->session = $session; } public function someService() { $sessionVar = $this->session->get('session_var'); } }
Попробуйте это решение:
use Symfony\Component\HttpFoundation\Session\Session; $session = new Session(); $session->get('variable');
faz assim que vai funcionar
use Symfony\Component\HttpFoundation\Session\Session; class ClassType extends AbstractType { private $session; /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $this->session = new Session(); ->add('field', $this->session->get('nameFieldSession')); } }