当我尝试将 @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(使用前将#替换为@)