Symfony控制器嵌入错误:URI“/ fragment”的控制器不可调用

时间:2013-07-01 17:19:39

标签: symfony controller render

我在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.

2 个答案:

答案 0 :(得分:32)

<强>解决方案:

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

将您的render功能更改为:

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

通知:方法名称中没有“...操作”)


提示

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

即。误导控制器/操作名称通常是导致此异常的原因。


进一步阅读:

看看this cookbook article

答案 1 :(得分:0)

我同意@nifr 您正在尝试使用controller()而不是控制器/操作来渲染模板(&#39; ... new.html.twig&#39;)。

将渲染功能更改为:

{{render(控制器(&#39; AcmeReadingBundle:默认:新&#39;))}}

(注意:不&#34; ......行动&#34;方法名称)

  

如果上面的解决方案没有给你解决方案,那就更多了。

  1. 检查控制器中定义的函数是否为公共函数。在我的情况下,我已经定义了受保护的。
  2. 谢谢,

    Anirudh Sood。