0

composer.phar を使用して Symfony 2.2.1 標準版をインストールし、app/console ユーティリティを使用して「ClientBundle」を生成しました。

@Route アノテーションを使用してルートを定義しようとしています。これが私のコントローラーです:

namespace ScrumBoard\ClientBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;


class DefaultController extends Controller
{
    /**
     * @Route("/my/route/path")
     */
    public function indexAction($name)
    {
        return $this->render('ScrumBoardClientBundle:Default:index.html.twig', array('name' => $name));
    }
}

そして、私のバンドルは次のように定義されています:

public function registerBundles()
{
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\AopBundle\JMSAopBundle(),
        new JMS\DiExtraBundle\JMSDiExtraBundle($this),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
        new Acme\HelloBundle\AcmeHelloBundle(),
        new ScrumBoard\ClientBundle\ScrumBoardClientBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }

    return $bundles;
}

SensioFrameworkExtraBundle がバンドルのリストに含まれていることがわかります。

ただし、http://symfony2.localhost/app_dev.php/my/route/pathに行くと、

ERROR - Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /my/route/path"" at C:\webdev\scrum-whiteboard\symfony-quickstart\app\cache\dev\classes.php line 3609

だから、明らかに何かが欠けています... @Route アノテーションを機能させるにはどうすればよいですか?

JFYI、http://symfony2.localhost/config.phpにアクセスすると、Symfony2 が動作していることがわかります。「新しい Symfony プロジェクトへようこそ」というメッセージが表示されます。メッセージが表示され、構成エラーは記録されません。

4

2 に答える 2

0

まず、ルーティング情報をメインのルーティング ファイルに含める必要があります。そうしないと、Symfony はルーティング アノテーションについて何も知りません。これは、他のルーティング ファイルを含めるのと同じ方法を使用して行われます。

# app/routing.yml
acme_demo:
    resource: @AcmeDemoBundle/Controller/DemoController.php
    type: annotation

タイプ「注釈」に注意してください。これは、Symfony が注釈を探すことを意味します@Route@AcmeDemoBundle/Controller/as resourceを使用して、バンドルのすべてのコントローラーを一度に含めることもできます。


さらに、注釈はコメントで初期化される単なるクラスです。useしたがって、ステートメントを使用して正しい名前空間をインポートする必要があります。

// src/Acme/DemoBundle/Controller/DemoController.php

// ...
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

// ...

最後に、ルーティング注釈をオフにしていないことを確認してください。これは、次のような方法で実行できます。

# app/config.yml
sensio_framework_extra:
    router: { annotations: false }

そのような場合は、ルーティング アノテーションが機能していませんtrueデフォルト値である に設定する必要があります。


詳細については、公式ドキュメントを参照してください: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html

于 2013-05-22T14:30:00.563 に答える