20

我在我的 Twig 模板中这样调用渲染(第 18 行)

{{ render(controller('AcmeReadingBundle:Default:newAction')) }}

控制器是

public function newAction(Request $request)
    { 
      $message = new Message();
      $form = $this->createFormBuilder($message)
        ->add('body', 'text')
        ->add('save', 'submit')
        ->getForm();

      $form->handleRequest($request);

      return $this->render('AcmeReadingBundle:Default:new.html.twig', array(
          'form' => $form->createView(),
        ));
    }

而 new.html.twig 文件是

{{ form(form) }}

我不断收到此错误:

An exception has been thrown during the rendering of a template ("The controller for URI "/_fragment" is not callable.") in AcmeReadingBundle:Default:show.html.twig at line 18.
4

2 回答 2

34

解决方案:

您正在尝试使用而不是控制器/动作来呈现模板('...new.html.twig')!controller()

将您的render功能更改为:

{{ render(controller('AcmeReadingBundle:Default:new')) }}

注意:方法名称中没有“...Action”)


提示:

如果指定的控制器名称有问题,通常会抛出 _fragment 异常。

即拼写错误的控制器/动作名称通常是此异常的原因。


进一步阅读:

看看这篇食谱文章

于 2013-07-01T17:24:41.400 回答
0

我同意@nifr 您正在尝试使用控制器()而不是控制器/动作来呈现模板('...new.html.twig')!

将您的渲染功能更改为:

{{ 渲染(控制器('AcmeReadingBundle:Default:new')) }}

(注意:方法名称中没有“...Action”)

如果上述解决方案没有为您提供解决方案,则以下内容更多。

  1. 检查控制器中定义的函数是否为公共函数。就我而言,我已经定义了受保护的。

谢谢,

阿尼鲁德·苏德。

于 2017-09-11T12:49:08.740 回答