使用带有 symfony4 自动加载和参数问题的外部存储库
Use an external repository with symfony4 trouble with autoload and parameters
我使用位于 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 抱怨找不到 classes 和服务。
我的第一个问题是:
为什么它们不像 symfony 使用的库中的其他 classes 那样自动加载,例如swiftmailer,phpmd,diablomedia/prettyprinter?所有都是库,默认情况下它们不是 symfony 的一部分。
但是这里的其他答案说,我必须在 services.yaml 中手动添加服务
所以我从我的图书馆添加了大量服务到 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.
Well Currency 是一种模型,而不是一种服务。它由我的库填充值并返回给我的主应用程序。
这是构造函数:
public function __construct(
string $currencyIsoCode,
string $name,
string $ident,
int $numberOfDecimals
) {
$this->currencyIsoCode = $currencyIsoCode;
$this->name = $name;
$this->sapIdent = $ident;
$this->numberOfDecimals = $numberOfDecimals;
}
如何配置此模型以使用字符串?我在哪里做?我真的必须声明我的图书馆正在使用的每一个 class 吗?定义每个class?
的每个参数
我认为您不必单独导入每个服务。您已经在“Puc\SapClient”部分这样做了。
问题可能是您正在导入不应导入的模型。
在 symfony example project 中有这部分 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."}'
“等等”将是不需要作为服务的一切。
我使用位于 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 抱怨找不到 classes 和服务。 我的第一个问题是: 为什么它们不像 symfony 使用的库中的其他 classes 那样自动加载,例如swiftmailer,phpmd,diablomedia/prettyprinter?所有都是库,默认情况下它们不是 symfony 的一部分。
但是这里的其他答案说,我必须在 services.yaml 中手动添加服务
所以我从我的图书馆添加了大量服务到 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.
Well Currency 是一种模型,而不是一种服务。它由我的库填充值并返回给我的主应用程序。 这是构造函数:
public function __construct(
string $currencyIsoCode,
string $name,
string $ident,
int $numberOfDecimals
) {
$this->currencyIsoCode = $currencyIsoCode;
$this->name = $name;
$this->sapIdent = $ident;
$this->numberOfDecimals = $numberOfDecimals;
}
如何配置此模型以使用字符串?我在哪里做?我真的必须声明我的图书馆正在使用的每一个 class 吗?定义每个class?
的每个参数我认为您不必单独导入每个服务。您已经在“Puc\SapClient”部分这样做了。
问题可能是您正在导入不应导入的模型。
在 symfony example project 中有这部分 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."}'
“等等”将是不需要作为服务的一切。