2012-07-10 7 views
18

次のエラーが表示されます:Symfony 2 - キャッシュをクリアできません - コンソール上のキャッシュをクリアしようとすると、非アクティブスコープ(「リクエスト」)のサービス(「リクエスト」)を作成できません

[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 ないあなたが探しているファイルかわから...

+0

使用しているSymfony2のバージョンを教えてください。 – fsenart

+0

返信ありがとうございます - 私は2.0.10を使用しています – greg

+0

リクエストオブジェクトとあなたのサービスにリクエストを注入するxmlファイルを使用するプロジェクトの部分からサンプルを提供できますか?似たようなバグを持った他のプロジェクトがいくつかあります。あなたのコードに応じて、すぐに解決策を提供することができます。 – fsenart

答えて

42

assetic小枝資産フィルター(cssrewrite)は、資産のURLを解決することが可能であろうように、サイトのルートへの要求を作成しました:

+0

ありがとうございました!また、__construct()関数で使用している場合は、コードをそこに置くことができます。その関数でのみ使用されます。 – Gigala

+1

私は自分のコマンドでそれを動作させました。私はこれらの2行(..enterScope ..とset request)を実行関数の先頭に追加する必要があります –

0

このrm -rf app/cache/*を実行してみてください...この方法はただでありますLinuxの削除方法

+1

返事をありがとう、それは私がやっていることです。私はそれを行うことに欠点はないと思うが、私はランダムなバグが好きではない! – greg

+2

私はassetic:dumpでこのエラーを受け取っていますので、これは残念なことに解決策ではありません。 – greg

3

この問題は、コンストラクタ内の要求オブジェクトを削除することで解決しました。 CLIはヘッドレスなので、手動で作成しない限り、「要求」オブジェクトはありません。

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'); 
     } 
    } 
} 
+0

CLIモードでは同等の機能はありますか?引数を指定した「CLI要求」を意味します。 –

+0

リクエストオブジェクトを手動で作成する必要があります – greg

+0

この回答はコンストラクタからのリクエストを削除することによって助けられました –

0

Шатов Максимに拡張するための答え私は ':手動で簡単に行うことによって、AppKernelクラスにinitializeContainerカーネルメソッドをオーバーロードするCLIにスコープ「要求」を作成するたとえば

0

私はこの広報を打ちます私のサービスでは特別なリクエストはしていませんでした.Symfonyコアのリクエストサービス自体に関連するエラーであるようです。

composer installベンダーを変更していないが(すでにインストール済み)、副作用としてSensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrapを実行していたため、問題が分類されていたようだ。

関連する問題