我有一个服务,它需要从请求中获取一些信息。
我不想一直将这些值传递给服务,那么服务是否有可能自己获得有关请求的一些信息,尤其是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
是一种特殊的服务,因为它可能需要实例化多次(通常在子请求中)。
更多信息:为什么不注入请求服务?