如何将@request注入到服务中?

2024-03-21

当我尝试将 @request 注入到我的任何服务中时,我收到此异常:

ScopeWideningInjectionException:检测到范围扩大注入: 定义“service.navigation”引用服务“request” 属于比较窄的范围。一般来说,以下两种方法都比较安全 将“service.navigation”移至“request”范围或依赖 提供者模式通过注入容器本身并请求 每次需要服务时“请求”。在罕见的特殊情况下 但这可能不是必需的,那么您可以将引用设置为 strict=false 来消除此错误。

最好的方法是什么?我应该尝试设置这个吗strict=false以及如何,或者我不应该注入请求服务,而是每次调用我需要的函数时通过我的控制器将其传递给服务?

另一种可能性是注入内核并从那里获取它,但在我的服务中我只使用@router和@request,所以注入整个内核是不合理的。


在 Symfony 2.4 中,这种情况发生了变化。现在,您可以注入“request_stack”服务。

例如:

use Symfony\Component\HttpFoundation\RequestStack;

class MyService
{

    protected $request;

    public function setRequest(RequestStack $request_stack)
    {
        $this->request = $request_stack->getCurrentRequest();
    }

}

在你的 config.yml 中:

services:
    my.service:
        class: Acme\DemoBundle\MyService
        calls:
            - [setRequest, ["@request_stack"]]

完整的文档在这里:http://symfony.com/blog/new-in-symfony-2-4-the-request-stack http://symfony.com/blog/new-in-symfony-2-4-the-request-stack

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将@request注入到服务中? 的相关文章

随机推荐