Symfony2:子目录中的路由控制器和视图

Symfony2:子目录中的路由控制器和视图,symfony,url-routing,Symfony,Url Routing,我正在开发一个包含前端和后端的捆绑包。我遵循有关构造后端和前端部件的控制器和视图的最佳方法的说明。但是我找不到如何在路由配置文件中指定子目录。我试着把这个放进去,但它不起作用 post: pattern: / defaults: { _controller: "HavactBlogBundle:Backend/Post:Backend/index" } 试试这个:用反斜杠替换斜杠 post: pattern: / defaults: { _controller: "

我正在开发一个包含前端和后端的捆绑包。我遵循有关构造后端和前端部件的控制器和视图的最佳方法的说明。但是我找不到如何在路由配置文件中指定子目录。我试着把这个放进去,但它不起作用

post:
  pattern:  /
  defaults: { _controller: "HavactBlogBundle:Backend/Post:Backend/index" }

试试这个:用反斜杠替换斜杠

post:
    pattern:  /
    defaults: { _controller: "HavactBlogBundle:Backend\Post:index" }

我决定将我的控制器公开为服务

post:
pattern:  /
defaults: { _controller: "my.controller.service.id:indexAction" }
在路由YAML中:

defaults: { _controller: Org\FancyBundle\Controller\Page\Blog\CommentsController::fancyAction }
这里的区别是,我没有在字符串周围使用引号,YAML对此没有意见。 在细枝模板中:

{% render "Org\\FancyBundle\\Controller\\Page\\Blog\\CommentsController::listAction" with {} %}

据我所知,我在逃跑方面从来没有遇到过任何问题。Windows/IIS上的Symfony 2.0.9、PHP 5.3.9(叹气)

对于那些不想将其控制器公开为服务(这是问题的间接解决方案)的人,您可以这样指定路由


路线名称:
路径:/path
默认值:{u controller:BundleName:Namespace/controller:action}

Namespace
是捆绑包的
Controller
目录中的子目录,后跟
/
以分隔它


所有其他的都应该是一样的。

简单的
行吗
HavactBlogBundle:Backend:Post:index
反斜杠scape下一个字符“P”并导致此错误:无法找到控制器“HavactBlogBundle:Backend ost”。我用bouble反斜杠解决了这个问题,它适用于controller,但不适用于template。索引位于backend子目录中,我需要的是类似以下内容的HavactBlogBundle:backend\\Post:backend/Post/index当您要在操作索引中呈现模板时,请使用以下内容:
return$this->render('HavactBlogBundle:backend:Post:index.html.twig')是,这可用于在操作中呈现模板,但不能在路由配置文件中呈现模板。默认值:{{u控制器:“HavactBlogBundle:Backend:Post:index.html.twig”}我认为这样做是“可行的”:{u控制器:“HavactBlogBundle:Backend/Post:index.html.twig”}用分号表示的约定类似于“bundle:dir:file”,其中dir是“Backend/Post”。在Symfony 2.7中对我很有效。用斜杠分隔是可以的——记住纠正移动到子目录的控制器的名称空间是很重要的。