【问题标题】:Symfony2: Routing controllers and views in subdirectoriesSymfony2:子目录中的路由控制器和视图
【发布时间】:2012-03-18 19:32:52
【问题描述】:

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

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

【问题讨论】:

  • 不简单的: 工作吗? HavactBlogBundle:Backend:Post:index

标签: symfony url-routing


【解决方案1】:

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

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

【讨论】:

  • 反斜杠修饰下一个字符“P”并导致此错误:无法找到控制器“HavactBlogBu​​ndle:Backend ost”。我用 bouble 反斜杠解决了,适用于控制器,但不适用于模板。索引在后端子目录中,我需要的是这样的 HavactBlogBu​​ndle:Backend\\Post:Backend/Post/index
  • 当你想在动作索引中渲染模板时使用这个:return $this->render('HavactBlogBundle:Backend:Post:index.html.twig');
  • 是的,这可以在动作中渲染模板,但不能在路由配置文件中。默认值:{ _controller: "HavatBlogBu​​ndle:Backend:Post:index.html.twig" }
  • 我相信它是“可行的”,方法如下: { _controller: "HavatBlogBu​​ndle:Backend/Post:index.html.twig" } 分号约定表示类似“bundle:dir:文件”,其中您的目录是“后端/发布”。
【解决方案2】:

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

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

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

其他一切都应该一样。

【讨论】:

  • 在 Symfony 2.7 中为我工作。斜线分隔很好 - 记住更正那些移动到子目录的控制器的命名空间很重要。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    在路由 YAML 中:

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

    这里的区别是我不在字符串周围使用引号,YAML 也可以。 在 Twig 模板中:

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 2012-10-13
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      相关资源
      最近更新 更多