Symfony 6/Pimcore – Как переопределить конфигурацию пакета из другого пакета ⇐ Php
-
Гость
Symfony 6/Pimcore – Как переопределить конфигурацию пакета из другого пакета
Здесь https://github.com/TorqIT/pimcore-flysy ... ure-bundle я создал пакет Symfony, который позволяет Pimcore (https://pimcore.com/en) использовать Flysystem для чтения/ записывать файлы в учетную запись хранения Azure. Для тех, кто не знает, Pimcore — это PIM/CMS/DAM на базе Symfony. Он содержит собственную конфигурацию Flysystem, конфигурацию которой можно увидеть здесь https://github.com/pimcore/pimcore/blob ... ystem.yaml.
Моя цель состоит в том, чтобы конфигурация Flysystem моего пользовательского пакета переопределяла конфигурацию Pimcore, однако это непоследовательно. Иногда я обнаруживаю, что файлы записываются в файловую систему, а не в Azure, но я не уверен, что является причиной этого. Всякий раз, когда я запускаю bin/console debug:container Flysystem или bin/console debug:config Flysystem, иногда я вижу загружаемый LocalFilesystemAdapter (т. из flysystem.yaml компании Pimcore), а иногда и моего собственного TorqAzureBlobStorageAdapter.
Я изучил проходы компилятора (https://symfony.com/doc/current/service ... asses.html) и попытался реализовать такой:
Последний класс FlysystemAzurePass реализует CompilerPassInterface { процесс публичной функции (ContainerBuilder $container): void { $pimcoreAdapterServiceIdsToCustomAdapters = [ // Сопоставление идентификаторов сервисов адаптера Pimcore Flysystem с нашими пользовательскими классами адаптеров (см. Services.yaml) 'flysystem.adapter.pimcore.document_static.storage' => 'document_static_adapter', 'flysystem.adapter.pimcore.asset.storage' => 'assets_adapter', 'flysystem.adapter.pimcore.asset_cache.storage' => 'asset_cache_adapter', 'flysystem.adapter.pimcore.thumbnail.storage' => 'thumbnail_adapter', 'flysystem.adapter.pimcore.version.storage' => 'version_adapter', 'flysystem.adapter.pimcore.recycle_bin.storage' => 'recycle_bin_adapter', 'flysystem.adapter.pimcore.admin.storage' => 'admin_adapter', 'flysystem.adapter.pimcore.email_log.storage' => 'email_log_adapter', 'flysystem.adapter.pimcore.temp.storage' => 'tmp_adapter', 'flysystem.adapter.pimcore.application_log.storage' => 'application_log_adapter', ]; foreach ($pimcoreAdapterServiceIdsToCustomAdapters as $pimcoreServiceId => $customAdapter) { $definition = $container->getDefinition($pimcoreServiceId); $definition->setClass($container->getDefinition($customAdapter)->getClass()); } } } Однако это приводит к ошибкам, связанным с тем, что моему пользовательскому классу адаптера не передаются правильные аргументы при его сборке контейнером: Сообщение: TorqIT\FlysystemAzureBundle\TorqAzureBlobStorageAdapter::__construct(): Аргумент №1 ($client) должен иметь тип MicrosoftAzure\Storage\Blob\BlobRestProxy, указана строка, вызываемая в /var/www/html/var/cache /dev/ContainerQ320XmG/getPimcore_Asset_StorageService.php в строке 29
Есть какие-нибудь мысли о том, как я могу это сделать? Заранее спасибо.
РЕДАКТИРОВАТЬ: Добавляем еще немного контекста - во время отладки я вижу, что аргументы, передаваемые моему пользовательскому адаптеру внутри контейнера, представляют собой параметры, обычно предназначенные для LocalFilesystemAdapter. Я попытался использовать метод setArgument в моем проходе компилятора, чтобы переопределить аргументы, но контейнер все равно загружает исходные аргументы, как я предполагаю, из-за порядка загрузки элементов. Я не уверен, есть ли еще место, где мне следует это сделать, или я совершенно не понимаю, как переопределить исходный файл конфигурации.
Здесь https://github.com/TorqIT/pimcore-flysy ... ure-bundle я создал пакет Symfony, который позволяет Pimcore (https://pimcore.com/en) использовать Flysystem для чтения/ записывать файлы в учетную запись хранения Azure. Для тех, кто не знает, Pimcore — это PIM/CMS/DAM на базе Symfony. Он содержит собственную конфигурацию Flysystem, конфигурацию которой можно увидеть здесь https://github.com/pimcore/pimcore/blob ... ystem.yaml.
Моя цель состоит в том, чтобы конфигурация Flysystem моего пользовательского пакета переопределяла конфигурацию Pimcore, однако это непоследовательно. Иногда я обнаруживаю, что файлы записываются в файловую систему, а не в Azure, но я не уверен, что является причиной этого. Всякий раз, когда я запускаю bin/console debug:container Flysystem или bin/console debug:config Flysystem, иногда я вижу загружаемый LocalFilesystemAdapter (т. из flysystem.yaml компании Pimcore), а иногда и моего собственного TorqAzureBlobStorageAdapter.
Я изучил проходы компилятора (https://symfony.com/doc/current/service ... asses.html) и попытался реализовать такой:
Последний класс FlysystemAzurePass реализует CompilerPassInterface { процесс публичной функции (ContainerBuilder $container): void { $pimcoreAdapterServiceIdsToCustomAdapters = [ // Сопоставление идентификаторов сервисов адаптера Pimcore Flysystem с нашими пользовательскими классами адаптеров (см. Services.yaml) 'flysystem.adapter.pimcore.document_static.storage' => 'document_static_adapter', 'flysystem.adapter.pimcore.asset.storage' => 'assets_adapter', 'flysystem.adapter.pimcore.asset_cache.storage' => 'asset_cache_adapter', 'flysystem.adapter.pimcore.thumbnail.storage' => 'thumbnail_adapter', 'flysystem.adapter.pimcore.version.storage' => 'version_adapter', 'flysystem.adapter.pimcore.recycle_bin.storage' => 'recycle_bin_adapter', 'flysystem.adapter.pimcore.admin.storage' => 'admin_adapter', 'flysystem.adapter.pimcore.email_log.storage' => 'email_log_adapter', 'flysystem.adapter.pimcore.temp.storage' => 'tmp_adapter', 'flysystem.adapter.pimcore.application_log.storage' => 'application_log_adapter', ]; foreach ($pimcoreAdapterServiceIdsToCustomAdapters as $pimcoreServiceId => $customAdapter) { $definition = $container->getDefinition($pimcoreServiceId); $definition->setClass($container->getDefinition($customAdapter)->getClass()); } } } Однако это приводит к ошибкам, связанным с тем, что моему пользовательскому классу адаптера не передаются правильные аргументы при его сборке контейнером: Сообщение: TorqIT\FlysystemAzureBundle\TorqAzureBlobStorageAdapter::__construct(): Аргумент №1 ($client) должен иметь тип MicrosoftAzure\Storage\Blob\BlobRestProxy, указана строка, вызываемая в /var/www/html/var/cache /dev/ContainerQ320XmG/getPimcore_Asset_StorageService.php в строке 29
Есть какие-нибудь мысли о том, как я могу это сделать? Заранее спасибо.
РЕДАКТИРОВАТЬ: Добавляем еще немного контекста - во время отладки я вижу, что аргументы, передаваемые моему пользовательскому адаптеру внутри контейнера, представляют собой параметры, обычно предназначенные для LocalFilesystemAdapter. Я попытался использовать метод setArgument в моем проходе компилятора, чтобы переопределить аргументы, но контейнер все равно загружает исходные аргументы, как я предполагаю, из-за порядка загрузки элементов. Я не уверен, есть ли еще место, где мне следует это сделать, или я совершенно не понимаю, как переопределить исходный файл конфигурации.
Мобильная версия