Symfony 6/Pimcore – Как переопределить конфигурацию пакета из другого пакетаPhp

Кемеровские программисты 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 в моем проходе компилятора, чтобы переопределить аргументы, но контейнер все равно загружает исходные аргументы, как я предполагаю, из-за порядка загрузки элементов. Я не уверен, есть ли еще место, где мне следует это сделать, или я совершенно не понимаю, как переопределить исходный файл конфигурации.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»