Как вы получаете доступ к сеансу пользователей из службы в Symfony2?
Кто-нибудь знает, как получить доступ к переменной сеанса в службе?
У меня есть служба, с которой я передаю контейнер. Я могу получить доступ к таким вещам, как служба 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');
Является частью сеанса службы, и если да, то что называется службой.
Любая помощь будет действительно оценена.
Ответы
Ответ 1
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
Ответ 2
Если вы не хотите передавать весь контейнер, вы просто передаете @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');
}
}
Ответ 3
Попробуйте это решение:
use Symfony\Component\HttpFoundation\Session\Session;
$session = new Session();
$session->get('variable');
Ответ 4
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'));
}
}