php Symfony 4.4无法将自定义服务可见性设置为公共

2vuwiymt  于 2023-06-21  发布在  PHP
关注(0)|答案(1)|浏览(126)

我有一个非常奇怪的问题,似乎违背了文档。
为了我的单元测试,我尝试将特定的服务可见性设置为“public”。但这根本不起作用。

# config/services.yaml

services:
  # default configuration for services in *this* file
  _defaults:
    autowire: true      # Automatically injects dependencies in your services.
    autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.  

  App\Service\Common\TokenService:
    public: true

但是当我试图模拟它时,我仍然在测试中得到这个错误:
Symfony\Component\DependencyInjection\Exception\InvalidArgumentException:“App\Service\Common\TokenService”服务是私有的,您无法替换它。
当我运行这个命令php bin/console debug:container TokenService时,我得到以下结果:

---------------- ---------------------------------
  Option           Value                           
 ---------------- ---------------------------------
  Service ID       App\Service\Common\TokenService
  Class            App\Service\Common\TokenService
  Tags             -
  Public           no <==== WHY ?
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        yes
  Autoconfigured   yes

如果我设置“public:true”below _defaults它工作,但这不是我想要的。

wqnecbli

wqnecbli1#

这里的问题是,服务的顺序很重要。
您的配置将创建您的服务并将其公开,但稍后您会有一些类似于以下的行:

App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migration,Tests,Kernel.php}'

服务将被再次创建,并覆盖您之前的声明,使其再次成为非公共的。
把你的配置放在这一行后面。

相关问题