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

symfony 4.1:不存在此类服务

梁宏才
2023-03-14

所以我上周创建了一个新的Symfony 4.1项目,并一直在努力解决它,没有任何问题。直到昨天我开始使用一些第三方依赖项。我通过使用作曲家需要guzzlehttp/guzzlehttp安装了GuzzleClient。就我所知,这个包安装得很好。

但是,当我尝试将此服务注入代码中的构造函数(事件或命令)时,会收到错误消息:无法自动连接服务“App\xxx\command\testCommand”:方法“\uu construct()”的参数“$client”引用类“GuzzleHttp\client”,但不存在此类服务

Guzzle服务不是唯一不起作用的服务,这只是一个例子。对我来说奇怪的是,我有很多依赖项,它们工作得很好,就像Doctrine DocumentManager、JMS序列化程序和NelmioApiDocBundle。

到目前为止,我所尝试的(实际上解决了这个问题)是将服务名称添加到我的服务中。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.
        public: false       # Allows optimizing the container by removing unused services; this also means
                        # fetching services directly from the container via $container->get() won't work.
                        # The best practice is to be explicit about your dependencies anyway.   

    GuzzleHttp\Client:  <-- Adding this makes it work flawlessly.

这个解决方案的问题是,我最终会在我的服务中添加数百个服务。yaml文件只是为了让他们工作。在我看来,这不是最佳解决方案。

所以我的问题是如何以最优雅的方式解决这个问题。这是我在我的项目中做错了什么吗?这是供应商方面必须解决的问题吗?如果是这样,它如何与Symfony 4.1一起工作?


共有1个答案

公西俊能
2023-03-14

composer需要GuzzleHttp\Client

看起来你是在要求一个类,而不是一个包。我不知道作曲家足够聪明,可以通过它提供的类来识别包,所以我检查了...它不能,只给出包名称建议。

确保您了解什么是作曲家软件包。

Guzzle服务不是唯一不起作用的服务,这只是一个例子。

你没有大口大口的服务。你只有guzzle库和它的类。服务需要一个服务定义,就像您编写的那样。

您提到的其他服务(如Doctrine)正在工作,因为它们是捆绑包,提供服务定义。

要么你使用一个捆绑包,要么你使用一个库,然后自己把它连接起来。

如果是暴饮暴食,我不会用包裹。再说一次,我不再直接使用guzzle,而是HTTPlug。(捆绑:https://github.com/php-http/HttplugBundle,图书馆:https://github.com/php-http/httplug)

 类似资料:
  • 我正在将一个项目从Symfony 3升级到Symfony 4(https://github.com/symfony/symfony/blob/master/UPGRADE-4.0.md),我有很多这样的存储库/服务: 当我尝试在浏览器中这样运行项目时: 我得到这个错误: 这是否意味着您必须在services.yaml文件中为“条令\ORM\Mapping\ClassMetadata”创建服务? 由

  • 我在尝试创建将keyup事件转换为可观察流时遇到问题。 我正在学习Ng书籍第6版。我被困在一个示例中,在您键入时搜索YouTube视频。当搜索返回时,我们将显示视频缩略图结果列表,以及每个视频的描述和链接。 因此,我们使用observable.from事件:https://github.com/NiLinli/ng-book2-angular-6-r68-code-samples/blob/mas

  • My for class是对中条目的引用。Hibernate需要我定义。使用的,定义自己的类对我来说不起作用。 这是我收到的错误: org.springframework.beans.factory.UnsatisfiedDependencyException:在类路径资源[org/springFramework/boot/autoconfiure/web/servlet/WebMvcAutoCo

  • 我正在将一个遗留的Java8项目迁移到Java11 项目正在使用这个类 它以前是从库/jar中获取的(我的意思是在Java8中): 但由于我正在迁移到Java 11,我必须遵守“唯一可见性”的要求(请参见https://stackoverflow.com/a/53824670/2300597), 我不得不删除包含这个类的JAR

  • 我有一个错误与我的Laravel 5.2应用程序,其中类方法的调用导致Laravel无法找到类。 我运行一个LAMP堆栈。 我尝试了各种建议,许多人偶然发现命名空间是解决方案。我是新来的Laravel,所以可能有一些元素设置,我做的不正确。我主要研究了文件夹所有权和权限。 在调用库提供的其他控制器时,我也遇到过这个问题。然而,我不确定描述这个问题是否会混淆真正的问题。 反射异常在Route.php

  • 我已经研究了几个小时,但似乎无法解决这个问题。错误与这段代码有关: (问题底部的完整代码。我用截图直观地显示问题。) 错误本身是: 不存在类型变量U的实例,因此GetUsersFaradacCountResponse符合CompletionStage 在s链的最开始,我删除了,并使用IntelliJ的“引入局部变量…”查看整个链(直至并包括第1118行)返回的类型的功能: 结果是一个 但是您可以看