使用带有 symfony4 自动加载和参数问题的外部存储库

问题描述 投票:0回答:1

我使用位于 github 中的两个自行开发的库作为私有存储库,以便我可以在多个项目中重用它。我通过作曲家将它们包括在内:

"license": "proprietary",
"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/my-account/puc-web-sap-client.git",
        "options": {
            "ssl": {
                "verify_peer": "false"
            }
        }
    },
    {
        "type": "vcs",
        "url": "https://github.com/my-account/puc-web-soap-client.git",
        "options": {
            "ssl": {
                "verify_peer": "false"
            }
        }
    }
],

现在 symfony 抱怨找不到类和服务。 我的第一个问题是: 为什么它们不像 symfony 使用的库中的其他类一样自动加载 swiftmailer、phpmd、diablomedia/prettyprinter?全部都是库,默认情况下它们不是 symfony 的一部分。

但是这里的其他答案说,我必须在 services.yaml 中手动添加服务 Symfony4 使用外部类库作为服务

因此,我将库中的大量服务添加到 services.yaml 文件中:

Puc\SapClient\:
    resource: '../vendor/puc/sap-client/src/*'
    autowire: true      # Automatically injects dependencies in your services.
    autoconfigure: true # Automatically registers your services as commands, event subscriber
    public: true


Puc\SapClient\Country\CountrySapServiceInterface:
    alias: Puc\SapClient\Country\CountrySapService

Puc\SapClient\Country\CountryService:
    autowire: true

Puc\SapClient\Currency\CurrencyService:
    autowire: true

Puc\SapClient\House\HouseService:
    autowire: true

Puc\SapClient\Ressort\RessortService:
    autowire: true

Puc\SapClient\Country\CountrySapService:
    autowire: true

Puc\SapClient\Currency\CurrencySapService:
    autowire: true
....

现在 php bin/console debug:autowiring 给我以下错误:

Cannot autowire service "Puc\SapClient\Model\Currency": argument "$currencyIsoCode" of method "__construct()" is type-hinted "string", you should configure its value explicitly.

货币是一种模型,而不是一种服务。它充满了我的图书馆的值并返回给我的主应用程序。 这是构造函数:

public function __construct(
    string $currencyIsoCode,
    string $name,
    string $ident,
    int $numberOfDecimals
) {
    $this->currencyIsoCode = $currencyIsoCode;
    $this->name = $name;
    $this->sapIdent = $ident;
    $this->numberOfDecimals = $numberOfDecimals;
}

如何配置此模型以使用字符串?我在哪里做? 我真的必须声明我的库正在使用的每个类吗?定义每个类的每个参数?

symfony autowired autoload
1个回答
0
投票

我认为您不必单独导入每个服务。您已经使用“Puc\SapClient”部分执行此操作。

问题可能是您正在导入不应导入的模型。

在 symfony 示例项目中有这部分“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."}'

“等等”将是不需要的所有服务。

© www.soinside.com 2019 - 2024. All rights reserved.