render(controller())throws致命错误:在非对象上调用成员函数getRelativePath()

时间:2015-02-05 13:56:15

标签: php symfony twig sonata

我在渲染谷歌加登录按钮的常用模板中调用它,并且此错误不会仅出现在主页http://mydomain.local/上,但当我转到http://mydomain.local/somepage之类的任何其他页面时,会出现此错误。

任何想法可以是什么?

{{ render(controller('MyNamespaceMyBundle:MyController:loginButton')) }}

public function loginButtonAction()
    {
        return $this->render('MyNamespaceMyBundle:MyController:button.html.twig',array(
            'client_key' => $this->config['client_key']
        ));
    }

就是这样,你还需要什么代码?

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我试图从sonata_page.ignore_route_patternsembedding a controller中包含的网页呈现树枝模板:

{% render(controller('AcmeDemoBundle:Controller:action', {param1 : 'value1'})) %}

得到了同样的例外,Call to a member function getRelativePath() on a non-object

Sonata \ PageBundle \ Twig \ Extension \ PageExtension 的控制器功能正在检查它是否定义了pathInfo属性,如果没有,则从站点选择器的相对路径中检索它。由于我的路线被排除在sonata_page之外,所以它不能。因此例外。

基本上,我刚刚传递了所需的属性并解决了问题:

    {% set pathInfo = path(app.request.attributes.get('_route'), 
        app.request.attributes.get('_route_params')) %}
    {% render(controller('AcmeDemoBundle:Controller:action', 
        {param1 : 'value1', pathInfo: pathInfo})) %}

答案 1 :(得分:0)

评论中显示您正在尝试使用Sonata的Page Bundle。我发现others have experienced this issue。根据讨论主题,你有:

  1. 未配置网站
  2. 使用“错误主机”配置网站
  3. 确保您按照Getting started文档中列出的步骤操作。具体来说,您可能需要执行此命令:

    php app/console sonata:page:create-site