Плагин Shopware 6: значение конфигурации неверно после обновления из-за удаления ключа конфигурации ⇐ Php
Плагин Shopware 6: значение конфигурации неверно после обновления из-за удаления ключа конфигурации
У меня есть плагин, который обрабатывает значение конфигурации для автоматической публикации обзоров (reviewModeration). В версии 1.6.3 я добавил новый ключ конфигурации autoPublishStars. Кроме того, я хочу полностью удалить reviewModeration в версии 1.6.4.
config.xml
reviewSkipModeration Автоматически принимать отзывы Автоматическая бесплатная доставка истина autoPublishStars Автоматическая публикация обзора со звездочками Стерне vorausgewählt 0 Нет Нет Кейне 0 0 звезд 0 Штерн 1 1 звезда 1 корма 2 2 звезды 2 Стерна 3 3 звезды 3 Стерна 4 4 звезды 4 Стерн 5 5 звезд 5 Стернов Функция обновления содержит логику для переноса старой конфигурации в новую:
обновление публичной функции (UpdateContext $context): void { родитель::обновление($контекст); // Получаем текущую установленную версию $version = $context->getCurrentPluginVersion(); // Обновляем конфигурацию только в версии 1.6.3 или выше if (version_compare($version, '1.6.3', '>=')) { // Получаем сервис конфигурации из контейнера $configService = $this->container->get('Shopware\Core\System\SystemConfig\SystemConfigService'); // Получаем текущее значение конфигурации $previousConfigVal = $configService->getBool('SwagPlugin.config.reviewModeration'); $newConfigVal = $previousConfigVal? '0': 'Нет'; // Устанавливаем указанное значение по умолчанию $configService->set('SwagPlugin.config.autoPublishStars', $newConfigVal); } } Это отлично работает при обновлении с 1.6.2 -> 1.6.3. Однако при обновлении с 1.6.3 -> 1.6.4, поскольку старый ключreviewModeration больше не существует, для autoPublishStars устанавливается значение None. независимо от предыдущего значения autoPublishStars:
[*]У пользователя включен reviewModeration (true) в версии 1.6.2 [*]Обновление до версии 1.6.3 полностью переносит новый ключ autoPublishStars [*]Обновление до версии 1.6.4 проверяет старый ключ reviewModeration, autoPublishStars получает значение false, инвертирует значение [*]v1.6.4 устанавливает для autoPublishStars значение false, хотя в версии 1.6.3 это значение true
Как предотвратить это неправильное переключение при рефакторинге ключей конфигурации в разных версиях плагина? Я хочу прочитать старый ключ только при первом обновлении, а не при последующих. Первой версией обновления может быть v1.7.8 (не обязательно 1.6.3), например, когда пользователь обновляется с версии 1.1.1 до версии 1.7.8.
Любая помощь приветствуется!
У меня есть плагин, который обрабатывает значение конфигурации для автоматической публикации обзоров (reviewModeration). В версии 1.6.3 я добавил новый ключ конфигурации autoPublishStars. Кроме того, я хочу полностью удалить reviewModeration в версии 1.6.4.
config.xml
reviewSkipModeration Автоматически принимать отзывы Автоматическая бесплатная доставка истина autoPublishStars Автоматическая публикация обзора со звездочками Стерне vorausgewählt 0 Нет Нет Кейне 0 0 звезд 0 Штерн 1 1 звезда 1 корма 2 2 звезды 2 Стерна 3 3 звезды 3 Стерна 4 4 звезды 4 Стерн 5 5 звезд 5 Стернов Функция обновления содержит логику для переноса старой конфигурации в новую:
обновление публичной функции (UpdateContext $context): void { родитель::обновление($контекст); // Получаем текущую установленную версию $version = $context->getCurrentPluginVersion(); // Обновляем конфигурацию только в версии 1.6.3 или выше if (version_compare($version, '1.6.3', '>=')) { // Получаем сервис конфигурации из контейнера $configService = $this->container->get('Shopware\Core\System\SystemConfig\SystemConfigService'); // Получаем текущее значение конфигурации $previousConfigVal = $configService->getBool('SwagPlugin.config.reviewModeration'); $newConfigVal = $previousConfigVal? '0': 'Нет'; // Устанавливаем указанное значение по умолчанию $configService->set('SwagPlugin.config.autoPublishStars', $newConfigVal); } } Это отлично работает при обновлении с 1.6.2 -> 1.6.3. Однако при обновлении с 1.6.3 -> 1.6.4, поскольку старый ключreviewModeration больше не существует, для autoPublishStars устанавливается значение None. независимо от предыдущего значения autoPublishStars:
[*]У пользователя включен reviewModeration (true) в версии 1.6.2 [*]Обновление до версии 1.6.3 полностью переносит новый ключ autoPublishStars [*]Обновление до версии 1.6.4 проверяет старый ключ reviewModeration, autoPublishStars получает значение false, инвертирует значение [*]v1.6.4 устанавливает для autoPublishStars значение false, хотя в версии 1.6.3 это значение true
Как предотвратить это неправильное переключение при рефакторинге ключей конфигурации в разных версиях плагина? Я хочу прочитать старый ключ только при первом обновлении, а не при последующих. Первой версией обновления может быть v1.7.8 (не обязательно 1.6.3), например, когда пользователь обновляется с версии 1.1.1 до версии 1.7.8.
Любая помощь приветствуется!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение