Symfony 2.4在TWIG中渲染控制器会抛出“渲染片段只能在处理请求时完成”。例外

时间:2013-12-08 19:19:22

标签: php symfony twig

从Symfony 2.3升级到2.4后,抛出以下异常:

在第34行的PageBundle :: base.html.twig中,在渲染模板期间抛出了异常(“渲染片段只能在处理请求时完成。”。)。

代码正在尝试渲染控制器:

{% if not app.user %}
<div id="login" class="fourcol last">
    {{ render(controller("SecurityBundle:Front/Security:login")) }}
</div>
{% endif %}

fragmentHandler抛出异常,因为$ request为null:

public function render($uri, $renderer = 'inline', array $options = array())
{
    if (!isset($options['ignore_errors'])) {
        $options['ignore_errors'] = !$this->debug;
    }

    if (!isset($this->renderers[$renderer])) {
        throw new \InvalidArgumentException(sprintf('The "%s" renderer does not exist.', $renderer));
    }

    if (!$request = $this->getRequest()) {
        throw new \LogicException('Rendering a fragment can only be done when handling a Request.');
    }
var_dump($request); die();
    return $this->deliver($this->renderers[$renderer]->render($uri, $request, $options));
} 

这也发生在其他树枝渲染函数调用上。

composer的Symfony组件版本列表:

symfony/assetic-bundle               v2.3.0
symfony/icu                          v1.2.0
symfony/monolog-bundle               v2.3.0
symfony/swiftmailer-bundle           v2.3.4
symfony/symfony                      v2.4.0 

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

我有同样的错误,但如果我删除“vendor”文件夹并通过“php composer.phar install”重新启动它,一切正常......

答案 1 :(得分:0)

幸运的是我在其他地方部署了该网站的测试版本,因此我能够比较依赖版本。 通过恢复到Symfony 2.3.7解决了这个错误。这是更新版本:

symfony/assetic-bundle               v2.3.0
symfony/icu                          v1.2.0 
symfony/monolog-bundle               v2.3.0 
symfony/swiftmailer-bundle           v2.3.4
symfony/symfony                      v2.3.7 

2.3.7中FragmentHandler中的render方法与2.4.0具有不同的条件

 if (null === $this->request) {
        throw new \LogicException('Rendering a fragment can only be done when handling a master Request.');
 }

这是检查null

答案 2 :(得分:0)

不确定我遇到了同样的问题,但它给了我“渲染片段只能在处理请求时才能完成”。错误。

我通过使用此命令重建引导程序解决了这个问题:

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

另见:Updating Symfony 2.4 : “Rendering a fragment can only be done when handling a Request.”