如何在Symfony中使用会话(Sessions)?

32

在经典的 PHP 中,我们使用魔术变量来启动和创建会话,那么在 Symfony 中如何实现呢?

2个回答

80

在Symfony2中,语法是不同的:

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

// store an attribute for reuse during a later user request
$session->set('foo', 'bar');

// in another controller for another request
$foo = $session->get('foo');

您也可以从Twig获取会话变量,而无需显式传递会话变量(它在全局'app'中):

{{ app.session.get('foo', 'bar'); }}

2
Symfony:因为谁真的关心迪米特法则呢? - user895378
6
使用会话变量如何违反迪米特定律? - Videl
3
@Videl,违反LoD的不是使用会话,而是来自Symfony的抽象层。 - Marcel Burkhard
7
"getRequest()"在Symfony 2.4版本已经被弃用。现在正确的方法是将一个Request注入到控制器中,并调用"$request->getSession()"。详情请参考:http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/Request.html#method_getSession - HPierce
这实际上是不关心德米特法则的相反,Symfony框架正在与自己的API通信。 - user3531149

33
在您的控制器中,您可以通过用户对象访问会话变量。
// Get a session value
$name = $this->getUser()->getAttribute('name', 'default_value');
// Set a session value
$this->getUser()->setAttribute('name', $value);

1
在您的视图中,您可以通过$sf_user变量访问会话变量,就像在控制器中使用$this->getUser()一样。 - Throoze
如果你没有用户或防火墙,我认为这不会起作用。 - Ascherer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接