Используйте внешний репозиторий с проблемами symfony4 с автозагрузкой и параметрами - PullRequest
0 голосов
/ 09 июля 2020

Я использую две собственные библиотеки, расположенные в 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;
}

Как я могу настроить эту модель для использования строк ? где мне это делать? Действительно ли мне нужно объявлять каждый класс, который использует моя библиотека? Чтобы определить каждый параметр каждого класса?

1 Ответ

0 голосов
/ 10 июля 2020

Я думаю, вам не нужно импортировать каждую услугу отдельно. Вы уже делаете это с частью «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."}'

"et c." Было бы все, что не нужно в качестве обслуживания.

...