Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何防止实体在容器中被列为服务?_Symfony_Dependency Injection_Symfony4_Ioc Container - Fatal编程技术网

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

Symfony 如何防止实体在容器中被列为服务?,symfony,dependency-injection,symfony4,ioc-container,Symfony,Dependency Injection,Symfony4,Ioc Container,当我运行下面的命令时,我可以看到Symfony将应用程序中的每个类都视为潜在的可注入服务: $ bin/console debug:container Symfony Container Services ========================== ------------------------------- ----------------------------- Service ID Class name

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

$ 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中发生了这种变化):

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

      所以本质上。。。如果删除该
      App\
      条目,则必须显式地添加所有应该是服务的类的白名单

      另一方面,示例中显示了黑名单,尽管示例非常一般。也许有更复杂的方法可以做到这一点……

      这是意料之中的

      看看config/services.yaml,这里发生了神奇的变化(至少在我的services.yaml中发生了这种变化):

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

      所以本质上。。。如果删除该
      App\
      条目,则必须显式地添加所有应该是服务的类的白名单


      另一方面,示例中显示了黑名单,尽管示例非常一般。也许有更复杂的方法可以做到这一点……

      谢谢!我猜白名单是通过
      包括:
      ?“白名单”是通过
      资源:
      实现的,谢谢!我猜白名单是通过
      include:
      ?“白名单”是通过
      资源:
      # removed lines for readability before, after and in-between the following
      services:
          App\:
              resource: '../src/*'
              exclude: '../src/{Entity,Migrations,Tests}'