2

PHP 5.4.7 を使用して、Symfony 2.1.4 の最新バージョンで新しいプロジェクトに取り組んでいます。

私は readme ファイルに目を通し、app/check.php設定に合格しました。Acme Demo は正常に動作し、すべてのページがテストされました。

次に、自分のバンドルを追加し、 を編集してapp/AppKernl.php、自分のバンドルから自分のバンドルapp/routing.ymlをロードし、自分でrouting.ymlをテストしindexAction()ましたSetupController

return $this->render('MyBundle:Setup:index.html.twig');

ページは期待どおりに表示されます。

次に、アノテーションを使用するように変更したため、コントローラーファイルは次のようになりました

// ...
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

// ...

class SetupController extends Controller
{
    /**
     * @Route("/", name="_setup")
     * @Template
     */
    public function indexAction(){
        // This method is totally empty.

        // Uncommenting the following line actually works, but I want to stick with
        // annotations if possible

        // return $this->render('MyBundle:Setup:index.html.twig');
    }
}

そしてルーティングファイルは

_setup:
    resource: "@MyBundle/Controller/SetupController.php"
    type:     annotation

ここで、ページは 500 内部サーバー エラー (LogicException) をスローし、次のメッセージが表示されます。

The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?

$this->render('...')に行を追加しようとしましたindexAction()が、ページはレンダリングされますが、それがないと、この 500 エラーだけです。

Acme Demo は今でも問題なく動作しています。の代わりに@Template('MyBundle:Setup:index.html.twig')andを使用してみましたが、それでも同じエラーが発生します。メソッドが問題なく見つけたので、テンプレート ファイルは正しい場所に配置されます。@Template()@Template$this->render()

構成ファイルで注釈をオフにしていないことを確認しました。また、開発用と本番用の両方のキャッシュをクリアしようとしましたが、それでもうまくいきません。

回避策として使用できます$this->render()が、Symfony で使用できないという注釈の何が問題なのかを知りたかったのです。

事前に助けやアドバイスをありがとう!他に役立つ情報があればお知らせください。

4

2 に答える 2

2

アノテーションを使用する場合は、テンプレートに渡される変数の@Templateを返す必要があります。array()

変数がない場合return array()

于 2012-12-13T16:50:21.063 に答える
0

あなたは常に-実際に行うResponseことを返す必要があります。$this - render( someTemplate )何も返却したくない場合:

return new Response;

そしてsymfonyは幸せになります。

[あなたの知識のためResponseSymfony\Component\HttpFoundationパッケージに入れます。]

于 2012-12-13T12:56:17.207 に答える