Contributed by
Tobias Schultze
in #26085.

在现代 Symfony 程序中已不建议再通过 bundles 来 组织你的业务逻辑。但是,仍然可以继续使用 "bundle notation",比如在定义路由时:

1
2
3
4
bundle_controller:
    path: /
    defaults:
        _controller: FrameworkBundle:Redirect:redirect

为了让事情简单化,以及通过标准PHP功能来替换 "Symfony自有概念",在 Symfony 4.1 中我们抑制了 bundle notation 写法,而是以常规的 PHP namespace notation 来替换:

1
2
3
4
bundle_controller:
    path: /
    defaults:
        _controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction

这样一来的话,我们还注意到,一个相关联的前后不一致的地方,也可被修复。当 把 controllers 作为服务 时,你必须使用单冒号 (:) 而不再是双冒号 (::),来把 service ID 和方法名隔开:

1
2
3
4
service_controller:
    path: /
    defaults:
        _controller: app.my_controller:myAction

在 Symfony 的其他部分你仍然可以使用双冒号 (::) 来分隔类名与方法名,因此这便令人迷惑,使学习曲线复杂化,全无益处。这也是为何在 Symfony 4.1 中你永远可以使用双冒号来分隔 method names,甚至在把控制器当作服务时:

1
2
3
4
service_controller:
    path: /
    defaults:
        _controller: app.my_controller::myAction