当前位置: 首页 > 知识库问答 >
问题:

Symfony 4-服务已删除或内联,尽管它是公共的

满伟彦
2023-03-14

我正在尝试将一个SF 3.3应用程序迁移到SF 4,它有新的目录结构和所有内容。

我正在努力解决这个例外:

编译容器时,simplethings_entityaudit.reader服务或别名已被删除或内联。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。

(此服务来自位于 /vendor的外部捆绑包)。

然而,当Ibin/console debug:container simplethings\u entityaudit.reader时,您将看到该服务存在并且是公共的:


Information for Service "simplethings_entityaudit.reader"
=========================================================

 ----------------- -------------------------------------- 
  Option            Value                                 
 ----------------- -------------------------------------- 
  Service ID        simplethings_entityaudit.reader       
  Class             SimpleThings\EntityAudit\AuditReader  
  Tags              -                                     
  Public            yes                                   
  Synthetic         no                                    
  Lazy              no                                    
  Shared            yes                                   
  Abstract          no                                    
  Autowired         no                                    
  Autoconfigured    no                                    
  Factory Service   simplethings_entityaudit.manager      
  Factory Method    createAuditReader                     
 ----------------- -------------------------------------- 

此服务目前在我自己的一个调用$this-

我还尝试将SimpleThings\EntityAudit\AuditReader注入到我的服务构造函数中,但我得到的是:

方法"__construct()"的参数"$auditReader"引用类"Simple物联网\EntityAude\AuditReader",但不存在这样的服务。它不能自动注册,因为它来自不同的根命名空间。

当我将它添加到我的服务.yaml中时,它可以工作,但我不需要这样做:

SimpleThings\EntityAudit\AuditReader:
    alias: simplethings_entityaudit.reader

有什么想法吗?


共有3个答案

竺鸿骞
2023-03-14

在我们的例子中,我们做了一个services_test.yml。env.testAPP_ENV测试

然后在这个服务测试中,我们放置了

服务:\默认值:public:true

因此,默认情况下,所有服务都是公共的

别忘了为你的.env和.env.test找源。我经常要这样做,因为我需要重新启动我的虚拟机

冀越
2023-03-14

在Symfony 4.0中,任何未指定其可见性的服务都是私有的,https://github.com/symfony/symfony/pull/24238.

据我所知,您提到的服务没有指定可见性:https://github.com/simplethings/EntityAuditBundle/blob/1.0/src/SimpleThings/EntityAudit/Resources/config/auditable.xml#L23-L26,所以这可能就是你例外的原因。

如果simplethings\u entityaudit.reader服务无法自动连接(这可能是因为它使用工厂服务),您可以通过引用@simplethings\u entityaudit.reader符号将其插入到您自己的服务中,如下所示:https://symfony.com/doc/current/service_container.html#services-手动连接args,大概是这样的:

services:
    My\Service:
        arguments:
            $auditReader: @simplethings_entityaudit.reader
微生令雪
2023-03-14

在我的例子中,错误出现在单元测试中。

我只有一个服务,无法在测试中加载(Symfony 4.2),而我的项目中的所有其他服务都运行良好。

我已经清除了缓存,但没用。然后,我创建了一个带有路由的简单控制器,并将服务作为方法参数注入。之后,服务在我的测试中也起了作用。

结论:如果您有一个单元测试并且想要测试您的服务,那么您还必须提供一个注入服务的控制器,否则它在测试服务容器中不可用。显式服务配置也可能有所帮助。

 类似资料:
  • 我正在尝试将一些Symfony 3代码重构为Symfony 4。 我得到以下错误时,试图登录: 编译容器时,“monolog.logger.db”服务或别名已被删除或内联。您应该将其公开,或者停止直接使用conta iner,改用依赖项注入。 我的日志代码: 独白配置: app.monolog.db_handler config(注意,我在这里尝试了,但没有影响: 我怎样才能在Symfony 4中

  • 从我搜索的url中删除public/from并尝试执行以下步骤 > 抄袭。htaccess from public/并将其粘贴到root/ 更改服务器。php来索引。php 我试着补充一下 RewriteRule上的RewriteEngine^(.*)$public/$1[L] 我的 /.htaccess删除网址公共它没有工作。 但是,如果我删除了这一行它的工作,但我所有的Url链接到css它的错

  • 问题内容: 请考虑下表: 我认为记录{1,2,A}和{2,1,A}是重复的。我需要选择并产生以下记录集: 我尝试了以下查询。但无济于事。 甚至这个: 两者都不起作用。 该数据库将为Oracle 10g。寻找纯SQL解决方案。感谢您的帮助。 问题答案: 使用GREATEST()和LEAST()函数来识别多个列中的公共值。然后使用DISTINCT清除重复项。 这样可以为您提供精确的记录集。但是,如果您

  • 我有一个由两个Symfony应用程序使用的库,该库定义了一组我希望公开的服务(我希望能够通过容器直接检索这些服务)。当我尝试访问一个服务时,我有: 编译容器时,已删除或内联库\Service\DerivedServices\OneSpecific实现"服务或别名。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。 问题是,所述服务是公开的。 基本上有: 一个库\服务\BaseService类

  • 我正在aws中运行openshift 我有一个主节点和两个节点。如何向aws公共IP公开服务?我可以在内部访问服务: 我怎么把它暴露给公共IP呢?是否可以在openshfit web控制台中完成?我尝试使用https://docs.openshift.com/container-platform/3.4/dev_guide/expose_service/expose_internal_ip_ser