Я использую две собственные библиотеки, расположенные в github, в качестве частного репозитория, поэтому я могу повторно использовать их в нескольких проектах. Я включаю их через composer:
"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.
Однако в других ответах здесь сказано, что мне нужно вручную добавлять службы в свои службы. Yaml Symfony4 использует внешнюю библиотеку классов в качестве service
Итак, я добавил множество сервисов из моей библиотеки в файл 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;
}
Как я могу настроить эту модель для использования строк ? где мне это делать? Действительно ли мне нужно объявлять каждый класс, который использует моя библиотека? Чтобы определить каждый параметр каждого класса?