因爲我遷移到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。
在HttpKernel
,handleRaw(Request $request, $type = self::MASTER_REQUEST)
通常會將請求推送到RequestStack($this->requestStack->push($request);
)。所以,如果我添加一個公共方法pushRequestStack($request)
HttpKernel
它的工作..但我怎麼能正確地做到這一點?我不覺得能得到$requestStack
從HttpKernel
(這樣我就可以從外部推請求)..
任何公開的方法,我不能用「正常」的方法($kernel->handle($request)
),因爲它會拋出一些異常,例如對於不存在的路由,或對於已經由PHP啓動的會話。
總之,有什麼辦法可以將我的/任何請求「推」到requestStack,而無需完整地處理請求?
大概應該是'$內核級> getContainer() - >集( '請求',請求:: createFromGlobals(), '請求');'不然你爲什麼創建'$ request'變量? – nifr
是的,這是一個錯誤,但它實際上會拋出同樣的錯誤。 – Bonswouar
我剛剛更新了我的原始帖子,現在我知道問題來自哪裏,我只是不知道如何繞過它! – Bonswouar