2012-07-10 13 views
18

gdy próbuję wyczyścić pamięć podręczną na konsoli pojawia się następujący błąd:Symfony 2 - może nie jest jasne cache - Nie można stworzyć usługę („Wniosek”) danego zakresu nieaktywnej („Wniosek”)

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

Czy ktoś wcześniej tego doświadczył? Dzięki.

Edit: Przykładowy kod:

//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 Nie wiesz, którą złożyć szukasz ...

+0

Proszę, możesz określić, której wersji Symfony2 używasz? – fsenart

+0

Dziękuję za odpowiedź - używam wersji 2.0.10 – greg

+0

Proszę podać przykład z części projektu, która korzysta z obiektu Request i pliku xml, który wprowadza żądanie do usługi. Jest kilka innych projektów, które miały podobny błąd i być może możemy dostarczyć Ci rozwiązanie out of box, w zależności od kodu. – fsenart

Odpowiedz

42

Na przykład, aby utworzyć ręcznie zakres „żądanie” w CLI można przeciążać initializeContainer metody jądra w AppKernel klasy, po prostu robi:

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

Dziękuję za odpowiedź! Ponadto, jeśli używasz go w funkcji __construct(), możesz umieścić tam kod, więc jest on używany tylko w tej funkcji – Gigala

+1

Mam to działa w moim poleceniu. Muszę tylko dodać te dwie linie (..enterScope .. i set request) na początku funkcji execute –

0

Spróbuj uruchomić ten rm -rf app/cache/* ... Ta metoda jest po prostu sposób linuxa usuwania.

+1

Dzięki za odpowiedź, właśnie to robiłem. Wydaje mi się, że nie ma na to problemu, ale nie lubię przypadkowych błędów! – greg

+2

Otrzymuję także ten błąd z assetic: dump, więc nie jest to naprawdę rozwiązanie niestety. – greg

3

Naprawiono ten problem, usuwając obiekt żądania z konstruktora. Ponieważ interfejs CLI jest bezgłowy, nie ma obiektu "żądania", chyba że został utworzony ręcznie.

+0

Czy istnieje odpowiednik, gdy jesteś w trybie CLI? Mam na myśli "żądanie CLI" z argumentami itp. –

+0

Musisz ręcznie utworzyć obiekt żądania – greg

+0

Ta odpowiedź pomogła mi, usuwając żądanie od konstruktora –

0

przedłużyć na Шатов Максим „s odpowiedzi I” utworzona prośbę do korzenia witryny tak, że filtry aktywów assetic gałązka (cssrewrite) będzie w stanie rozwiązać adresy URL aktywów:

0

uderzę to pr oblem, ale nie robiłem nic specjalnego z żądaniami w moich własnych usługach - okazało się, że błąd był związany z samą usługą żądania w rdzeniu Symfony.

Rozwiązałem go, wykonując composer install, który nie zmienił dostawców (już zainstalowanych), ale uruchomił Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap jako efekt uboczny i wydawało się, że rozwiązał problem.

Powiązane problemy