从控制器中删除会话对象创建

Removing session object creation from controller

我正在用 symfony2 开发购物车。我添加了产品并存储在会话中。为了显示购物车(在每一页的顶部),目前我正在执行:

$session = new Session(); 

在每个控制器的每个动作中。

最好的方法是什么?

在 symfony2 框架中,会话作为服务公开,因此最好不要让容器为您自己管理会话生命周期。您也可以在您的自定义服务中注入它。因此,例如,您可以在会话中设置一个对象,如:

通用控制器:

 $user_id = $this->get('session')->set('user_id',null /*default value*/);

 $this->get('session')->set('product_id',$product_id);

参阅 doc 进一步参考。

您还可以通过以下方式访问twig中的session服务:

{{app.session.get('product_id')}}

希望对您有所帮助。