Symfony 2.4.2:您不能创建非活动范围(“请求")的服务(“请求") [英] Symfony 2.4.2: You cannot create a service ("request") of an inactive scope ("request")

查看:20
本文介绍了Symfony 2.4.2:您不能创建非活动范围(“请求")的服务(“请求")的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚将一个项目从 2.2.2 更新到 Symfony 2.4.2.升级探查器后导致异常显示在每个页面的底部:

'Symfony\Component\DependencyInjection\Exception\InactiveScopeException' 带有消息 '您不能创建非活动范围(请求")的服务(请求").'

( ! ) Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\InactiveScopeException' with message 'You cannot create a service ("request") of an inactive scope ("request").'在第 3776 行的/var/www/pm/app/cache/dev/appDevDebugProjectContainer.php 中( ! ) Symfony\Component\DependencyInjection\Exception\InactiveScopeException:您不能创建非活动范围(请求")的服务(请求").在第 3776 行的/var/www/pm/app/cache/dev/appDevDebugProjectContainer.php 中调用栈# 时间记忆功能位置1 0.0029 239928 {main}() ../app_dev.php:02 4.0354 53462264 Symfony\Component\HttpKernel\Kernel->terminate() ../app_dev.php:183 4.0355 53462360 Symfony\Component\HttpKernel\HttpKernel->terminate() ../bootstrap.php.cache:22834 4.0371 53473320 Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->dispatch() ../bootstrap.php.cache:28945 4.0377 53477632 Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() ../TraceableEventDispatcher.php:1386 4.0377 53477632 Symfony\Component\EventDispatcher\EventDispatcher->dispatch() ../classes.php:18317 4.0377 53477696 Symfony\Component\EventDispatcher\EventDispatcher->doDispatch() ../classes.php:16678 4.0377 53478048 call_user_func () ../classes.php:17349 4.0377 53478088 Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->Symfony\Component\HttpKernel\Debug\{closure}() ../classes.php:173410 4.0385 53482400 call_user_func () ../TraceableEventDispatcher.php:38811 4.0385 53482440 Symfony\Component\HttpKernel\EventListener\ProfilerListener->onKernelTerminate() ../TraceableEventDispatcher.php:38812 4.0387 53486304 Symfony\Component\HttpKernel\Profiler\Profiler->saveProfile() ../ProfilerListener.php:13613 4.0388 53486480 Symfony\Component\HttpKernel\DataCollector\EventDataCollector->lateCollect() ../Profiler.php:11514 4.0388 53486544 Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->getNotCalledListeners() ../EventDataCollector.php:4815 4.0388 53486752 Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->getListeners() ../TraceableEventDispatcher.php:16616 4.0388 53486848 Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->getListeners() ../TraceableEventDispatcher.php:10617 4.0403 53497920 Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->lazyLoad() ../classes.php:180718 4.0416 53520352 Symfony\Component\DependencyInjection\Container->get() ../classes.php:1842

似乎是profiler监听内核终止时导致的错误,但我一直没能解决问题.

怎么了?

编辑

具有请求注入的服务示例:

服务:property.value.form.resolver.number:类:飞盘\ProductBundle\Form\Resolver\PropertyTypeFormResolverNumber参数:[@form.factory, @request]范围:请求

解决方案

请尝试以下方法之一来处理该异常:

  • 删除 scope: request 并将 arguments: [@form.factory, @request] 更改为 arguments: [@form.factory, @request=]

  • 使用自 Symfony 2.3 起可用的同步服务,其中 synchronized: true 需要添加到服务配置中,并将 setter 函数添加到类中.请求在范围内可用时由 Symfony DI 设置.参考(http://symfony.com/doc/current/cookbook/service_container/scopes.html):

<块引用>

服务:property.value.form.resolver.number:类:飞盘\ProductBundle\Form\Resolver\PropertyTypeFormResolverNumber参数:[@form.factory]同步:真调用:- [setRequest, ["@?request="]]

/*** @param 请求 $request*/公共函数 setRequest(Request $request = null){如果 ($request !== null) {$this->request = $request;}}

  • 在配置中添加 lazy: true 也可能有帮助:
<块引用>

服务:property.value.form.resolver.number:类:飞盘\ProductBundle\Form\Resolver\PropertyTypeFormResolverNumber参数:[@form.factory, @request]范围:请求懒惰:真的

I just updated a project to Symfony 2.4.2 from 2.2.2. After upgrading the profiler is causing an exception that is displayed inline at the bottom of each page:

'Symfony\Component\DependencyInjection\Exception\InactiveScopeException' with message 'You cannot create a service ("request") of an inactive scope ("request").'

( ! ) Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\InactiveScopeException' with message 'You cannot create a service ("request") of an inactive scope ("request").' in /var/www/pm/app/cache/dev/appDevDebugProjectContainer.php on line 3776
( ! ) Symfony\Component\DependencyInjection\Exception\InactiveScopeException: You cannot create a service ("request") of an inactive scope ("request"). in /var/www/pm/app/cache/dev/appDevDebugProjectContainer.php on line 3776
Call Stack
#   Time    Memory  Function    Location
1   0.0029  239928  {main}( )   ../app_dev.php:0
2   4.0354  53462264    Symfony\Component\HttpKernel\Kernel->terminate( )   ../app_dev.php:18
3   4.0355  53462360    Symfony\Component\HttpKernel\HttpKernel->terminate( )   ../bootstrap.php.cache:2283
4   4.0371  53473320    Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->dispatch( )    ../bootstrap.php.cache:2894
5   4.0377  53477632    Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch( )    ../TraceableEventDispatcher.php:138
6   4.0377  53477632    Symfony\Component\EventDispatcher\EventDispatcher->dispatch( )  ../classes.php:1831
7   4.0377  53477696    Symfony\Component\EventDispatcher\EventDispatcher->doDispatch( )    ../classes.php:1667
8   4.0377  53478048    call_user_func ( )  ../classes.php:1734
9   4.0377  53478088    Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->Symfony\Component\HttpKernel\Debug\{closure}( )    ../classes.php:1734
10  4.0385  53482400    call_user_func ( )  ../TraceableEventDispatcher.php:388
11  4.0385  53482440    Symfony\Component\HttpKernel\EventListener\ProfilerListener->onKernelTerminate( )   ../TraceableEventDispatcher.php:388
12  4.0387  53486304    Symfony\Component\HttpKernel\Profiler\Profiler->saveProfile( )  ../ProfilerListener.php:136
13  4.0388  53486480    Symfony\Component\HttpKernel\DataCollector\EventDataCollector->lateCollect( )   ../Profiler.php:115
14  4.0388  53486544    Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->getNotCalledListeners( )   ../EventDataCollector.php:48
15  4.0388  53486752    Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->getListeners( )    ../TraceableEventDispatcher.php:166
16  4.0388  53486848    Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->getListeners( )    ../TraceableEventDispatcher.php:106
17  4.0403  53497920    Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->lazyLoad( )    ../classes.php:1807
18  4.0416  53520352    Symfony\Component\DependencyInjection\Container->get( ) ../classes.php:1842

It seems that the error is caused when the profiler listens for the kernel termination, but I haven't been able to solve the issue.

What is wrong?

Edit

Example of a service that has request injection:

services:
    property.value.form.resolver.number:
        class: Frisbee\ProductBundle\Form\Resolver\PropertyTypeFormResolverNumber
        arguments: [@form.factory, @request]
        scope: request

解决方案

Please try one of the follow approach to deal with that exception:

  • Remove scope: request and change arguments: [@form.factory, @request] to arguments: [@form.factory, @request=]

  • use Synchronized Service available since Symfony 2.3 where synchronized: true needs to be added to the service configuration and setter function to the class. Request is set by Symfony DI when available in scope. Reference (http://symfony.com/doc/current/cookbook/service_container/scopes.html):

services:     
    property.value.form.resolver.number:
        class: Frisbee\ProductBundle\Form\Resolver\PropertyTypeFormResolverNumber
        arguments: [@form.factory]
        synchronized: true
        calls:
            - [setRequest, ["@?request="]]

    /**
     * @param Request $request
    */
    public function setRequest(Request $request = null)
    {
        if ($request !== null) {
            $this->request = $request;
        }
    }

  • adding lazy: true to the configuration may also help:

services:
    property.value.form.resolver.number:
        class: Frisbee\ProductBundle\Form\Resolver\PropertyTypeFormResolverNumber
        arguments: [@form.factory, @request]
        scope: request
        lazy: true

这篇关于Symfony 2.4.2:您不能创建非活动范围(“请求")的服务(“请求")的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆