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


render(controller()) throws Fatal error: Call to a member function getRelativePath() on a non-object

我在渲染谷歌加签名按钮的公共模板中调用了它,这个错误不仅出现在主页上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']
        ));
    }

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

我也遇到了同样的问题。我试图从sonata_page.ignore_route_patterns中包含的页面中呈现一个小树枝模板,嵌入了一个控制器:

{% 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})) %}

评论中透露,您正在尝试使用Sonata的页面捆绑包。我发现其他人也经历过这个问题。根据你的讨论线索:

  1. 未配置站点
  2. 为站点配置了"坏主机"

请确保按照入门文档中列出的步骤进行操作。具体来说,您可能需要执行以下命令:

php app/console sonata:page:create-site