如何防止实体在容器中被列为服务?
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
...
这包括实体和值对象,它们显然不应该也永远不会被注入,因此不应在容器中注册。
这是预期的吗?有没有办法:
- 明确列入黑名单 classes 不在容器中注册,
- 或明确将应在容器中注册的服务列入白名单?
符合预期。
看看 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 白名单所有应该是 类服务。
另一方面,示例中显示了黑名单,尽管该示例非常笼统。也许有更复杂的方法来做到这一点...
当我 运行 下面的命令时,我可以看到 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
...
这包括实体和值对象,它们显然不应该也永远不会被注入,因此不应在容器中注册。
这是预期的吗?有没有办法:
- 明确列入黑名单 classes 不在容器中注册,
- 或明确将应在容器中注册的服务列入白名单?
符合预期。
看看 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 白名单所有应该是 类服务。
另一方面,示例中显示了黑名单,尽管该示例非常笼统。也许有更复杂的方法来做到这一点...