symfony - 更新 Symfony 2.4 : "Rendering a fragment can only be done when handling a Request."

标签 symfony request twig updating symfony-2.4

自从我迁移到 Symfony 2.4 后,我收到以下错误消息:

Rendering a fragment can only be done when handling a Request.

发生这种情况是因为,在某些页面上,我在某些页面内使用 Twig 渲染了一些模板,这些模板由另一个较旧的框架处理,方法是 $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 ->推送($请求);)。因此,如果我将一个公共(public)方法 pushRequestStack($request) 添加到 HttpKernel 中,它就可以工作。但是我该如何正确地做到这一点?我没有找到任何能够从 HttpKernel 获取 $requestStack 的公共(public)方法(因此我可以向外部推送请求)。

而且我不能使用“正常”方法 ($kernel->handle($request)) 因为它会抛出一些异常,例如对于不存在的路由,或者对于已经由 PHP 启动的 session 。

总而言之,有没有办法在不完全处理请求的情况下将我/任何请求“推送”到 requestStack?

最佳答案

您必须通过 Sf2 命令将新请求推送到“request_stack”中。

 $this->getContainer()->get('request_stack')->push(Request::createFromGlobals());

关于symfony - 更新 Symfony 2.4 : "Rendering a fragment can only be done when handling a Request.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21684218/

相关文章:

javascript - Nodejs/Expressjs Request访问API时返回404

php - 从 Symfony 4/5 中的另一个包覆盖包模板

http - http_x_forwarded_for 检查 IP 是否安全

angularjs - Symfony 2 中 AngularJS 模板位置的最佳实践和新的 Angular Router?

firefox-addon - 如何在 firefox-addon-sdk 的 "Request"函数中使用 post

php - Symfony2/ Twig : Generate Alternate Absolute URL Path for use with CDN?

php - 在 Twig 中,检查数组的特定键是否存在

symfony - 在 Twig 中的 block 之间传递变量数据

windows - Symfony2 : automatically logging in users from their Windows session

php - 学说映射可以,但数据库验证不行