2012-03-18 130 views
3

我正在开发一个包含前端和后端的包。我遵循有关结构控制器和后端和前端部件herehere的视图的最佳方法的说明。但我找不到如何在我的路由配置文件中指定子目录。我试图把这个,但它不工作。Symfony2:子目录中的路由控制器和视图

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

不简单':'工作? 'HavactBlogBu​​ndle:Backend:Post:index' – 2012-03-18 19:59:19

回答

2

我relsoved暴露我的控制器作为服务

post: 
pattern:/
defaults: { _controller: "my.controller.service.id:indexAction" } 
16

试试这个:

defaults: { _controller: Org\FancyBundle\Controller\Page\Blog\CommentsController::fancyAction } 

的区别:用反斜杠

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

反斜线scape下一个字符“P”并导致此错误:无法找到控制器“HavactBlogBu​​ndle:Backendost”。我解决了双反斜杠和控制器,但不适用于模板。索引是在后端子目录中,我需要的是这样的HavactBlogBu​​ndle:Backend \\ Post:Backend/Post/index – smoreno 2012-03-19 04:08:15

+1

当你想在动作索引中渲染模板使用这个:'return $ this-> render('HavactBlogBu​​ndle: Backend:Post:index.html.twig');' – 2012-03-19 09:02:14

+0

是的,这可以在一个动作中呈现模板,但不在路由配置文件中。默认:{_controller:“HavactBlogBu​​ndle:Backend:Post:index.html.twig”} – smoreno 2012-03-19 13:12:25

0

路由YAML更换斜线这里是临屋区我不会在字符串周围使用引号,而YAML可以。 在树枝模板:

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

我从来没有任何问题与逃避,我知道的。 Symfony 2.0.9,Windows/IIS上的PHP 5.3.9(叹气)

4

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

route_name: path: /path defaults: { _controller: BundleName:Namespace/Controller:action }

Namespace是您在bundle的Controller目录下创建子目录,然后/分离它。

其他所有工作都应该一样。

+0

在Symfony 2.7中适用于我。用于分隔的斜杠很好 - 记住更正移动到子目录的那些控制器的名称空间非常重要。 – Atan 2016-06-21 11:29:32