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 |