有谁知道如何访问服务中的会话变量?
我有一个服务设置,我将容器传递给。我可以使用:
访问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');
会话是服务的一部分,如果是,那么所谓的服务是什么。
任何帮助都会非常感激。
答案 0 :(得分:54)
如果您不想传递整个容器,只需在参数中传入@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');
}
}
答案 1 :(得分:26)
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 :(得分:2)
试试这个解决方案:
use Symfony\Component\HttpFoundation\Session\Session;
$session = new Session();
$session->get('variable');
答案 3 :(得分:2)
在Symfony 4中,如果您已将服务配置为自动连线,则不再需要通过services.yaml
手动注入会话。
相反,您只需注入会话接口即可:
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class SessionService
{
private $session;
public function __construct(
SessionInterface $session
)
{
$this->session = $session;
}
}
答案 4 :(得分:-2)
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'));
}
}