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

注意类型 'annotation',这意味着 Symfony 将寻找@Route注释。@AcmeDemoBundle/Controller/您还可以使用作为资源一次包含捆绑包的所有控制器。


此外,注释只是在注释中初始化的类。因此,您需要使用以下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 回答
0

这是我如何让它工作的。我不知道这是否正确。我必须做两件事。

首先,我将它添加到我的 routing.yml 文件中:

ScrumBoardClientBundle:
  resource: "@ScrumBoardClientBundle/Controller/"
  type:     annotation
  prefix:   /scrum

然后我在控制器顶部添加了这个“使用”语句:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

一旦我这样做了,我的路线就开始起作用了。我确实需要将 /scrum 添加到我的路径中,所以我的完整路径变成了:

http://symfony2.localhost/app_dev.php/scrum/my/other/path

请告知我是否正确执行了此操作。谢谢!

于 2013-05-21T22:40:01.087 回答