我有一项服务,需要从请求中获取一些信息。
我不想一直将这些值传递给服务,因此服务是否有可能获得有关请求的信息,尤其是cookie?
class SomeService {
public function someMethod() {
// access request and cookies, whithout passing in those values
}
}
答案 0 :(得分:3)
然后注入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();
}
}
答案 1 :(得分:1)
或者,从Symfony 2.4开始,您可以轻松注入新的@request_stack
服务。
来自docs:
如果您正在尝试注入请求服务,那么这个简单的解决方案 是注入
request_stack
服务而是访问当前服务 通过调用getCurrentRequest()
方法请求(参见 Injecting the Request)...
这应该涵盖大多数情况。
@request_stack
模拟@request
服务,其行为与应用中的任何其他服务相同。
@request
是一项特殊服务,因为它可能需要多次实例化(通常在子请求中)。