Symfony 2.4.2:您不能创建非活动范围(“请求")的服务(“请求") [英] Symfony 2.4.2: You cannot create a service ("request") of an inactive scope ("request")
问题描述
我刚刚将一个项目从 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 changearguments: [@form.factory, @request]
toarguments: [@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屋!