Symfony 2 - 无法清除缓存 - 您无法创建非活动范围的服务(“请求”)(“请求”)

时间:2012-07-10 00:44:29

标签: symfony

每当我尝试清除控制台上的缓存时,我都会收到以下错误:

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

以前有没有人经历过这个?谢谢。

编辑:代码示例:

//accessing request object
namespace Greg\TestBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DependencyInjection\ContainerInterface;
use HvH\APIschemaBundle\Controller\Validation;
use HvH\APIschemaBundle\Controller\Helpers;

//FOSRestBundle
use FOS\RestBundle\View\View;

class TestController extends Controller
{
    public function testAction(Request $request) 
    {                       
        //get any query strings
        $query_strings = $request->query->all();
        return($query_strings);
    }
}

XML 不确定您要查找哪个文件...

5 个答案:

答案 0 :(得分:44)

例如,要在CLI中手动创建范围“请求”,您可以重载 AppKernel 类中的 initializeContainer 内核方法,只需执行以下操作:

class AppKernel extends Kernel {
    public function registerBundles() {
        // ...
    }

    public function registerContainerConfiguration(LoaderInterface $loader) {
        // ...
    }

    protected function initializeContainer() {
        parent::initializeContainer();
        if (PHP_SAPI == 'cli') {
            $this->getContainer()->enterScope('request');
            $this->getContainer()->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request');
        }
    }
}

答案 1 :(得分:3)

通过删除构造函数中的请求对象来解决此问题。由于CLI是无头的,除非手动创建,否则没有“请求”对象。

答案 2 :(得分:0)

尝试运行此rm -rf app/cache/* ...此方法只是linux的删除方式。

答案 3 :(得分:0)

要延长Шатов Максим的答案,我已经创建了对网站根目录的请求,以便资产树枝资产过滤器(css​​rewrite)能够解析资产网址:

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        // ...
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        // ...
    }

    protected function initializeContainer()
    {
        parent::initializeContainer();
        if (PHP_SAPI == 'cli') {
            $request = new Request();
            $request->create('/');
            $this->getContainer()->enterScope('request');
            $this->getContainer()->set('request', $request, 'request');
        }
    }
}

答案 4 :(得分:0)

我遇到了这个问题,但是我在自己的服务中对请求没有做任何特殊处理 - 似乎错误与Symfony核心内的请求服务本身有关。

我通过执行composer install解决了这个问题,这个问题没有改变供应商(已经安装)但是确实运行Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap作为副作用,这似乎解决了问题。