Contributed by
Nicolas Grekas
in #26921.

在 Symfony 3.4 中我们让 所有Symfony服务默认私有。总地说来这样更好,程序更健壮 (前述贴子有论述),但也存在一些欠点。

比如 debug:container 命令默认就隐藏了私有服务,因此对你程序中的服务进行罗列就没用了。这就是为何在 Symfony 4.1 中我们改变了 debug:container 命令,以便默认展示私有服务,同时不建议再使用 --show-private 选项。

无关于公有或私有,有些时候在 debug:container 列表中隐藏一些服务是有用的,因为它们就没想让开发者看到。这种情况下,你可以在 service ID 前面添加一个dot符号 (.),令它变成 "hidden service" 隐藏服务。

隐藏起来的服务行为上如同其他服务,除了事实上它们默认不被包括在 debug:container 命令的输出中,因此你必须添加 --show-hidden 选项来显示它们:

1
$  ./bin/console debug:container --show-hidden

我们已经使用了此功能来 隐藏Symfony内部的某些服务,这些服务是由 Lock组件 创建的。