Contributed by
Fabien Potencier
in #24160.

即将到来的 Symfony 4 版本的最大改变之一就是删除了 bundles 以管理程序代码。Bundles 仍然作为三方插件而存在,安装在 vendor/ 下,但是你自己的代码仍然默认居于 src/ 目录,它将使用 PHP 的原生命名空间而不再是 bundles 的了。

在 Symfony 3.4 中我们意图进一步简化 bundles。这就是为何我们 deprecated bundle inheritance 不建议使用 bundle 继承,而且要在 Symfony 4.0 中删除它。那个 inheritance mechanism 继承架构,传统上一度用于模板、控制器以及三方 bundle 中其他元素的覆写。在 Symfony 4.0 中你必须使用替代方案来覆写那些东东:

  • Controllers: define a route with the same path as the controller you want to override and implement your own logic.(去定义一个与你希望覆写并实现你自己逻辑的控制器具有相同路径的路由。)
  • Templates: use Twig namespaces to define your own templates using the same namespace as the bundle you want to customize.(使用 Twig 命名空间来定义你自己的模板,利用的是你所希望覆写的 bundle 的那个命名空间)
  • Routing: don't load the bundle routes or apply the same technique as controllers.(不得加载 bundle 路由或把此技巧应用在控制器上。)
  • Services and Configuration: use compiler passes or service decoration.(使用 compiler pass 或 service decoration。)
  • Entities: not possible unless the bundle provides a mapped superclass.(不可能覆写,除非 bundle 提供了一个映射了的超类。)
  • Forms: use form extensions.(使用表单类型扩展。)
  • Validation: not possible unless the bundle provides validation groups.(不可能覆写,除非 bundle 提供了验证群组。)
  • Translations: not related to bundle inheritance; just override the right translation domain.(不存在与 bundle 继承相关的内容,只需去覆写恰当的翻译域)