我有一个小的外部库,它公开了许多类。
在我的symfony4项目中,我想声明我的类来自供应商,作为带有autowire和public的服务。因此,我将我的库包含在composer中,并将类似这样的psr配置添加到composer中。json:
"autoload": {
"psr-4": {
"App\\": "src/",
"ExternalLibrary\\": "vendor/external-library/api/src/"
}
}
在那之后,我试图改变我的服务。yaml进入symfony,如下所示:
ExternalLibrary\:
resource: '../vendor/external-library/api/src/*'
public: true
autowire: true
如果启动测试或运行应用程序,则会返回以下错误:
Cannot autowire service "App\Domain\Service\MyService": argument "$repository" of method "__construct()" references interface "ExternalLibrary\Domain\Model\Repository" but no such service exists. You should maybe alias this interface to the existing "App\Infrastructure\Domain\Model\MysqlRepository" service.
如果我申报服役。yaml此界面工作正常:
ExternalLibrary\Domain\Model\Lotto\Repository:
class: '../vendor/external-library/api/src/Domain/Model/Repository.php'
public: true
autowire: true
但是我有很多类,我不想声明每个类,如果不声明每一个服务,我怎么能修复services.yaml呢?
谢谢
我也有同样的问题,有人给了我这个解决方案,对我来说效果很好:
使用带有symfony4的外部存储库时,自动加载和参数会出现问题
我在这里复制用户@DasBen的其他解决方案,以防万一:
我认为您不必分别导入每个服务。您已经在使用“Puc\SapClient”部分这样做了。
问题可能是您正在导入您的模型,而这些模型不应该被导入。
在Symfony示例项目中,有一部分vor"services.yaml":
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{Bundle,DependencyInjection,Entity,Model,Migrations,Tests,Kernel.php}'
那么你的角色将是:
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
Puc\SapClient\:
resource: '../vendor/puc/sap-client/src/*'
exclude: ''../vendor/puc/sap-client/src/{Entity,Model,"etc."}'
“等”将是服务不需要的一切。
让我们以Dompdf为例:
当您尝试在操作控制器或服务方法中添加type-hint Dompdf时,会出现一个错误,说自动连接是不可能的,因为Dompdf是一个外部PHP库
所以为了解决这个问题,我们将对我们的服务做一点改变。通过添加此短配置,可以创建yaml文件
Dompdf\: #Add the global namespace
resource: '../vendor/dompdf/dompdf/src/*' #Where can we find your external lib ?
autowire: true #Turn autowire to true
将上述示例应用于所有外部PHP库:)
这就是全部!
您需要手动创建服务:我没有测试它,但它应该是这样的
services.yaml
Some\Vendor\:
resource: '../vendor/external-library/api/src/*'
public: true # should be false
Some\Vendor\FooInterface:
alias: Some\Vendor\Foo # Interface implementation
Some\Vendor\Bar:
class: Some\Vendor\Bar
autowire: true
php
<?php
namespace Some\Vendor;
class Foo implements FooInterface
{
}
class Bar
{
public function __construct(FooInterface $foo)
{
}
}
更准确地说,你应该有这样的东西
ExternalLibrary\Domain\Model\Repository:
alias: App\Infrastructure\Domain\Model\MysqlRepository
我使用位于github的两个自主开发的库作为私有存储库,这样我就可以在几个项目中重用它。我包括他们通过作曲家: 现在symfony抱怨找不到类和服务。我的第一个问题是:为什么它们不像symfony使用的库中的其他类那样自动加载,例如swiftmailer、phpmd、diablomedia/prettyprinter?所有都是库,默认情况下不是symfony的一部分。 然而,这里的其他回答说,我必
问题内容: 我在Java项目中添加了一些外部库(在netbeans中)。 是否可以将外部jar库放入Java存档(而不是将其放入单独的(例如)“ lib”目录)? 问题答案: 当然可以。可以使用包含所有依赖项的“捆绑罐”下载一些开源项目。 您需要提取所有jar,然后将其再次打包到一个文件中。在此处 可以看到使用Ant进行此操作的示例。
此功能的状态是实验性的。我们欢迎您对此功能的实用性的反馈。我们可能会在未来发展这个功能,使其更加通用。虽然我们将努力确保向后兼容性,但不能保证。 场景 在某些情况下,希望能够从交易处理函数中调用REST API。这使你可以将区块链中的复杂计算移出。调用REST API允许交易处理器功能将复杂或昂贵的计算外包给中央或peer托管的服务。 调用外部REST服务 post(url,data)函数可用于交
我希望托管在 Openshift 集群中的应用程序面向外部 REST API,而无需在客户端应用程序中硬编码 IP/PORT,并且能够在不重新交付应用程序的情况下更改 IP/PORT。 我设法通过ConfigMap做到了这一点,但我看到也可能通过OpenShift doc中的服务做到这一点。 然而,我没有设法理解它是如何工作的。我做了以下操作: 在第一个curl中,使用endpoint中定义的地址
我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计