为什么Symfony 2.8服务中的请求对象为空?

时间:2016-07-21 16:55:14

标签: php symfony service request

Symfony 2.8服务中的

有这项服务:

services:
    app.admin_menu:
        class: GRF\AdminPanelBundle\Service\Menu
        shared: false
        arguments: [@request_stack]

并在服务构造中:

public function __construct(RequestStack $request)
{
    exit(var_dump($request));
}

并在浏览器中:

object(Symfony\Component\HttpFoundation\RequestStack)#261 (1) { ["requests":"Symfony\Component\HttpFoundation\RequestStack":private]=> array(0) { } }

如何在服务中访问当前请求?现在当前请求为空

2 个答案:

答案 0 :(得分:2)

我有similar issue

解决方案是尽可能晚地尝试访问RequestStack对象,以便内核有机会填充它。

基本上,不要尝试在构造函数中访问它。

我将它的访问权移到了一个稍后调用的方法中,它为我解决了它。

private $requestStack;

public function __construct(RequestStack $request)
{
    $this->requestStack = $request;
}

public function outputRequestStack() {
    exit(var_dump($this->requestStack));
}

答案 1 :(得分:1)

RequestStack是一个对象,包含多个请求(用于内部转发和esi)。要从中提取Request个对象,您可以调用$request = requestStack->getMasterRequest();