Bon*_*uar 2 updating request symfony twig symfony-2.4
自从我迁移到Symfony 2.4后,我收到以下错误消息:
只能在处理请求时才能渲染片段.
它正在发生,因为在某些页面上,我在一些页面中使用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();
Run Code Online (Sandbox Code Playgroud)
编辑:顺便说一句,它可能与此有关:Symfony 2.4在TWIG中渲染控制器会抛出"渲染片段只能在处理请求时完成".例外.虽然,我不想降级到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?
小智 6
您必须在Sf2命令的"request_stack"中推送一个新请求.
$this->getContainer()->get('request_stack')->push(Request::createFromGlobals());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |