2014-02-10 62 views
1

因爲我遷移到Symfony的2.4,我收到以下錯誤信息:更新Symfony 2.4:「只有在處理請求時才能完成片段渲染。」

渲染片段處理請求時才能完成。

它的發生是因爲,在一些網頁上,我呈現在由另一舊的框架處理,通過做一些$sf2->container->get('twig')->render("MyBundle::my-template.html.twig");內頁用嫩枝一些模板。

所以是的,沒錯,Symfony 2沒有處理這些請求,但我仍然想用Twig渲染這些模板!爲什麼我不能這樣做(再)?!以及如何解決這個問題?

下面是我執行「引導」 SF2在我的舊項目代碼:

$loader = require_once __DIR__.'/../../../app/bootstrap.php.cache'; 
Debug::enable(); 
require_once __DIR__.'/../../../app/AppKernel.php'; 

$kernel = new AppKernel('bootstrap', true); 
$kernel->loadClassCache(); 
Request::enableHttpMethodParameterOverride(); 
$request = Request::createFromGlobals(); 
$kernel->boot(); 
$kernel->getContainer()->enterScope('request'); 
$kernel->getContainer()->set('request', $request, 'request'); 
$this->container = $kernel->getContainer(); 

編輯:順便說一句,這可能與是:Symfony 2.4 Rendering a controller in TWIG throws "Rendering a fragment can only be done when handling a Request." Exception。 雖然我不想降級到Symfony 2.3,但刪除vendor目錄並沒有解決我的問題。

EDIT²:我發現問題是因爲新的RequestStack

HttpKernelhandleRaw(Request $request, $type = self::MASTER_REQUEST)通常會將請求推送到RequestStack($this->requestStack->push($request);)。所以,如果我添加一個公共方法pushRequestStack($request)HttpKernel它的工作..但我怎麼能正確地做到這一點?我不覺得能得​​到$requestStackHttpKernel(這樣我就可以從外部推請求)..

任何公開的方法,我不能用「正常」的方法($kernel->handle($request)),因爲它會拋出一些異常,例如對於不存在的路由,或對於已經由PHP啓動的會話。

總之,有什麼辦法可以將我的/任何請求「推」到requestStack,而無需完整地處理請求?

+0

大概應該是'$內核級> getContainer() - >集( '請求',請求:: createFromGlobals(), '請求');'不然你爲什麼創建'$ request'變量? – nifr

+0

是的,這是一個錯誤,但它實際上會拋出同樣的錯誤。 – Bonswouar

+0

我剛剛更新了我的原始帖子,現在我知道問題來自哪裏,我只是不知道如何繞過它! – Bonswouar

回答

0

我有同樣的問題,解決了這個由與此命令重建引導:

php vendor/bundles/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php app 
+0

我試過一樣,但它不能解決我的問題。儘管我使用的是Symfony 2.7,但我已經重建了相同的引導程序。 – FortuneSoldier

4

你必須推從Sf2的命令中的「request_stack」的新要求。

$this->getContainer()->get('request_stack')->push(Request::createFromGlobals()); 
相關問題