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

时间:2012-02-16 12:09:53

标签: php symfony

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

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

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

2 个答案:

答案 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是一项特殊服务,因为它可能需要多次实例化(通常在子请求中)。

有关详情:Why not Inject the request Service?