如何防止实体在容器中被列为服务?

How to prevent entities from being listed as services in the container?

当我 运行 下面的命令时,我可以看到 Symfony 将应用程序中的每个 class 视为潜在的可注入服务:

$ bin/console debug:container

Symfony Container Services
==========================

 ------------------------------- -----------------------------
  Service ID                     Class name                                                                                 
 ------------------------------- -----------------------------

  App\Domain\Model\Product       App\Domain\Model\Product                                                                   
  App\Domain\Model\Site          App\Domain\Model\Site                                                                      
  App\Domain\Model\User          App\Domain\Model\User                                                                      
  ...

这包括实体和值对象,它们显然不应该也永远不会被注入,因此不应在容器中注册。

这是预期的吗?有没有办法:

符合预期。

看看 config/services.yaml 魔法发生的地方(至少这发生在我的 services.yaml):

# removed lines for readability before, after and in-between the following
services:
    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests}'

这基本上应该将 src 目录中除实体、迁移和测试之外的所有内容都转换为服务。您显然可以根据自己的需要进行调整。

所以基本上......如果你删除那个 App\ 条目,你将被明确地 add 白名单所有应该是 类服务。

另一方面,示例中显示了黑名单,尽管该示例非常笼统。也许有更复杂的方法来做到这一点...