如果您想从控制器访问会话,可以使用this->get('session');
。
但是它如何在扩展中起作用?
我尝试在services.xml中配置它并调整__construct($ session)方法:
<service id="myService" class="%myServie.class%">
<argument type="service" id="session"/>
</service>
没用。 (空物体)
我尝试从请求中找到它:
$request = Request::createFromGlobals();
$session = $request->getSession();
没用。 (null object)
目前我正在为我的方法提供我在Controller中检索的会话,但我对这个解决方案不满意(我认为这是一个肮脏的解决方案)。
你如何以正确的方式做到这一点?
此致 Senad
答案 0 :(得分:4)
您可以通过多种方式解决此问题。一种方法是使用整个框架中使用的依赖注入。
如果您将会话传递给扩展构造函数,则会将该会话“注入”该类。
class MyService
{
public function __construct($session)
{
// ...
}
}
class MyController extends Controller
{
public function exampleAction()
{
$myService = new MyService($this->get('session'));
}
}
Symfony 2提供了一种自动注入此会话的方法。为此,您需要创建服务:
services:
myService:
class: %myService.class%
arguments: ["@session"]
然后在您的控制器中,您可以获得服务:
$myService = $this->get('myService');