Symfony 4 - flysystem autowire - PullRequest
       45

Symfony 4 - flysystem autowire

0 голосов
/ 03 июня 2018

Не могли бы вы помочь мне с этим, пожалуйста?

Невозможно автоматически подключить службу "App \ Estimate \ DocumentManager": аргумент "$ flysystem" метода "__construct ()" ссылается на класс "League \ Flysystem \ Filesystem", нотакого сервиса не существует.Возможно, вам следует присвоить этому классу псевдоним существующей службе oneup_flysystem.estimateDocumentsFilesystem_filesystem.

мой конфигурационный файл:

parameters:
    flysystem.local.estimate_documents.path: '%kernel.root_dir%/../public/uploads/estimate/documents'

services:
    app.estimate.document_manager:
        class: App\Estimate\DocumentManager
        lazy: true
        public: true
        arguments: ['@doctrine.orm.entity_manager', '@estimateDocumentsFilesystem', '@monolog.logger']

oneup_flysystem:
    filesystems:
        estimateDocumentsFilesystem:
            adapter: estimateDocumentsAdapter
            visibility: public
            alias: "estimate_documents_filesystem"

    adapters:
        estimateDocumentsAdapter:
            local:
                directory: "%flysystem.local.estimate_documents.path%"

class DocumentManager
{

    /**
     * @var EntityManager
     */
    private $manager;

    /**
     * @var Filesystem
     */
    private $flysystem;

    /**
     * @var Logger
     */
    private $logger;

    /**
     * DocumentManager constructor.
     *
     * @param EntityManagerInterface $manager
     * @param Filesystem $flysystem
     * @param Logger $logger
     */
    public function __construct(
        EntityManagerInterface $manager,
        Filesystem $flysystem,
        Logger $logger
    )
    {
        $this->manager = $manager;
        $this->flysystem = $flysystem;
        $this->logger = $logger;
    }
}

Большое спасибо.Я не могу понять, где проблема.

// РЕДАКТИРОВАТЬ:

, если я добавлю это, если я добавлю это в конфигурации

services:
League\Flysystem\FilesystemInterface: '@estimate_documents_filesystem'

это работает только для одной файловой системы, чтое .. не так?

С наилучшими пожеланиями, Джимми

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Ответ на отключение автоконфигурации, на мой взгляд, является глупым ответом, поскольку лучшая практика Symfony - использовать его.

Проблема в том, что текущая версия OneupFlysystemBundle работает неправильнонастройте его службы для правильного использования автоматической проводки Symfoyny.

Поэтому до тех пор, пока это не будет исправлено в пакете, правильным обходным решением является ручная привязка интерфейса к нужной службе.В вашем services.yaml

League\Flysystem\FilesystemInterface: "@estimate_documents_filesystem"

(Примечание: если вы используете конфигурацию этого пакета по умолчанию и выполняете ее шаги, служба будет называться "@oneup_flysystem.acme_filesystem", или, следуя рекомендациям Symfony, она должна быть"@oneup_flysystem.app_filesystem" если у вас только одна файловая система. Если вы не уверены, вы можете использовать bin/console debug:container, чтобы найти правильное имя службы)

0 голосов
/ 30 июля 2018

Нужно отключить автопроводку и автонастройку.Добавьте это:

autoconfigure:false
autowire:false

Полная конфигурация:

App\Estimate\Document\DocumentManager:
    autoconfigure: false
    autowire: false
    arguments: ['@doctrine.orm.entity_manager', '@estimate_documents_filesystem', '@monolog.logger']

App\User\DocumentManager:
    autoconfigure: false
    autowire: false
    arguments: ['@doctrine.orm.entity_manager', '@user_avatars_filesystem', '@monolog.logger']
...