如何访问cookie或从服务请求?symfony


How to access cookies or request from a service? symfony

我有一个服务,它需要从请求中获取一些信息。

我不想一直将这些值传递给服务,那么服务是否有可能自己获得有关请求的一些信息,尤其是cookie?

class SomeService {
    public function someMethod() {
        // access request and cookies, whithout passing in those values
    }
}

然后注入request服务。

你肯定有一个服务定义,修改如下:

<service id="my_service" class="SomeService" scope="request">
    <argument type="service" id="request" />
</service>

然后在您的类中,创建一个__construct方法,该方法将接收请求对象:

class SomeService 
{
    private $request;
    public function __construct(Request $request) {
        $this->request = $request;
    }
    public function someMethod() {
        $this->request->getSession();
    }
}

或者,从Symfony 2.4开始,您可以轻松地注入新的@request_stack服务。

来自文档:

如果您正在尝试注入请求服务,那么简单的解决方案是注入request_stack服务,并访问当前通过调用getCurrentRequest()方法请求(请参阅注入请求)。。。

这应该涵盖大多数情况。

@request_stack模拟@request服务,该服务的行为与应用程序中的任何其他服务类似。

@request是一种特殊的服务,因为它可能需要实例化多次(通常在子请求中)。

更多信息:为什么不注入请求服务?