6

我制作了一个新的 Symfony2 包并删除了 Acme 包。

然后我创建了一个新的控制器(MainController.php):

<?php
namespace My\BlogBundle\Controller;

class MainController extends Controller
{
    /**
     * @Route("/", name="index")
     * @Template()
     */
    public function indexAction()
    {

        return array();
    }

和一个简单的观点: ( Main/index.html.twig) 其中只包含一个hello. 我的 routing.yml 是空的。当我运行整个项目时,我得到:

No route found for "GET /"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

这里有什么问题以及如何解决?

这是我的路由调试:

\Symfony>php app/console router:debug
[router] Current routes
Name                     Method Pattern
_wdt                     ANY    /_wdt/{token}
_profiler_search         ANY    /_profiler/search
_profiler_purge          ANY    /_profiler/purge
_profiler_info           ANY    /_profiler/info/{about}
_profiler_import         ANY    /_profiler/import
_profiler_export         ANY    /_profiler/export/{token}.txt
_profiler_phpinfo        ANY    /_profiler/phpinfo
_profiler_search_results ANY    /_profiler/{token}/search/results
_profiler                ANY    /_profiler/{token}
_profiler_redirect       ANY    /_profiler/
_configurator_home       ANY    /_configurator/
_configurator_step       ANY    /_configurator/step/{index}
_configurator_final      ANY    /_configurator/final

我也清除了缓存,但没有成功。

这是 routes.yml:

my_blog:
    resource: "@MyBlogBundle/Resources/config/routing.yml"
    prefix:   /

而且里面的 routing.ymlMyBlogBundle/Resources/config/routing.yml是空的。

4

5 回答 5

12

routes.yml的设置方式是从捆绑包中请求routing.yml文件。

如果你想使用注解来管理你的bundle中的路由,你必须这样写routes.yml

my_blog:
    resource: "@MyBlogBundle/Controller/MainController.php"
    prefix:   /
    type:     annotation

并且您的控制器需要包含以下Route类中的类FrameworkExtraBundle

<?php
namespace My\BlogBundle\Controller;

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

class MainController extends Controller
{
    /**
     * @Route("/", name="index")
     * @Template()
     */
    public function indexAction()
    {
        return array();
    }
}

这假设您已经安装了SensioFrameworkExtraBundlehttp://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html#installation)。

有关路由注释的更多信息:http: //symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html

于 2013-01-20T21:17:35.793 回答
1

您还可以使用以下命令声明注释的路由:

blog_index:
    path: /
    defaults: {_controller:BlogBundle:index}

在您的 BlogBu​​ndle/config/routing.yml

在根目录下,设置

blog:
    resource: "@BlogBundle/Resources/config/routing.yml"
    prefix:   /

然后在您的 MainController 中,注释应该可以工作:

..use Symfony\Component\Routing\Annotation\Route;

       /**
         * @Route("/", name="blogindex")
         */
于 2015-10-01T07:48:50.803 回答
0

为类添加以下注释MainController

/**
 * @Route("/")
 */
class MainController extends Controller
{
}
于 2013-01-20T18:12:19.017 回答
0

您的问题是您已将路由引用为 yml 而不是注释,如果您想使用注释,则必须在应用文件夹的前端路由中声明为

post:
    resource: "@AcmeBlogBundle/Controller/PostController.php"
    type:     annotation

在您定义的 PostController 类中

use Symfony\Component\Routing\Annotation\Route;

    /**
     * @Route("/")
     */
    class MainController extends Controller
    {
    }

和功能

    /**
     * @Route("/add", name="article_add")
     */
     public function add(){
        ...
     }

请参阅文档中的参考

于 2015-10-01T08:54:58.027 回答
0

对于其他故障排除路由器注释正确安装但路由不起作用的情况,您可能需要安装

composer require symfony/apache-pack
于 2020-06-27T11:45:34.883 回答