我有一个FormHandler需要三次依赖注入:Form,Request和ArticleManager
我在services.xml中以这种方式配置它们:
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<!-- ArticleManager - Persistence layer -->
<service id="loc_article.manager" class="LOC\ArticleBundle\Entity\ArticleManager">
<argument type="service" id="doctrine.orm.entity_manager" />
<argument>LOC\ArticleBundle\Entity\Article</argument>
</service>
<!-- ArticleForm - Business layer -->
<service id="loc_article.form" factory-method="createNamed" factory-service="form.factory" class="Symfony\Component\Form\Form">
</service>
<service id="loc_article.form.type" class="LOC\ArticleBundle\Form\Type\ArticleFormType">
<argument>LOC\ArticleBundle\Entity\Article</argument>
</service>
<service id="loc_article.form.handler" class="LOC\ArticleBundle\Form\Handler\ArticleFormHandler">
<argument type="service" id="loc_article.form" />
<argument type="service" id="request" />
<argument type="service" id="loc_article.manager" />
</service>
</services>
运行app_dev.php时,出现以下异常:
ScopeWideningInjectionException:检测到范围扩展注入:定义“loc_article.form.handler”引用属于较窄范围的服务“request”。通常,将“loc_article.form.handler”移动到作用域“request”更安全,或者通过注入容器本身来依赖提供者模式,并在每次需要时请求服务“请求”。在极少数情况下,特殊情况可能没有必要,那么您可以将引用设置为strict = false以消除此错误。
我该怎么办?
答案 0 :(得分:1)
How to work with Scopes食谱条目应该回答你的问题。
答案 1 :(得分:1)
如异常建议添加request
范围,例如
<service id="loc_article.form.handler" class="LOC\ArticleBundle\Form\Handler\ArticleFormHandler" scope="request">