web-dev-qa-db-ja.com

symfonyコントローラー埋め込みエラー:URI「/ _ fragment」のコントローラーを呼び出せません

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.
19
a53-416

解決策:

controller/actionの代わりにcontroller()を使用して、template( '... new.html.twig')をレンダリングしようとしています。

render関数を次のように変更します:

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

notice:メソッド名に「... Action」がありません)


ヒント:

指定されたコントローラー名に問題がある場合、ほとんどの場合、_fragment例外がスローされます。

つまり、コントローラー/アクション名のスペルミスがこの例外の理由であることがよくあります。


さらに読む:

このクックブックの記事 を見てください。

32

@nifrに同意します。コントローラー/アクションの代わりにcontroller()を使用してテンプレート( '... new.html.twig')をレンダリングしようとしています!

レンダリング関数を次のように変更します。

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

(注意:メソッド名に「...アクション」がありません)

上記の解決策があなたに解決策を与えていない場合は、以下がより多くです。

  1. コントローラで定義されている関数がパブリック関数であるかどうかを確認してください。私の場合、私はそれを保護することを定義しました。

ありがとう、

アニルード・スッド。

0
Anirudh Sood