You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6插件:布尔配置转单选配置的迁移与逻辑修改

Shopware 6插件1.7.2→1.7.3升级实现方案

一、配置定义修改

替换原有布尔配置reviewSkipModeration为单选配置autoPublishStars,修改插件的src/Resources/config/config.xml:

<card>
    <title>评论设置</title>
    <elements>
        <single-select-field>
            <name>autoPublishStars</name>
            <label>自动发布评论星级</label>
            <defaultValue>0</defaultValue> <!-- 继承原默认true的行为:自动发布所有评论 -->
            <options>
                <option>
                    <value>none</value>
                    <label>None(不自动发布任何评论)</label>
                </option>
                <option>
                    <value>0</value>
                    <label>0星及以上(自动发布所有评论)</label>
                </option>
                <option>
                    <value>1</value>
                    <label>1星及以上</label>
                </option>
                <option>
                    <value>2</value>
                    <label>2星及以上</label>
                </option>
                <option>
                    <value>3</value>
                    <label>3星及以上</label>
                </option>
                <option>
                    <value>4</value>
                    <label>4星及以上</label>
                </option>
                <option>
                    <value>5</value>
                    <label>5星及以上</label>
                </option>
            </options>
        </single-select-field>
    </elements>
</card>

同时更新自定义配置类(若有),移除旧配置的 getter 方法,新增新配置的方法:

// src/System/Config/Configuration.php
class Configuration extends AbstractConfiguration
{
    public function getAutoPublishStars(): string
    {
        // 默认值设为0,保证新安装用户行为和原默认一致
        return $this->get('autoPublishStars', '0');
    }
}

二、插件升级时的配置数据映射

在插件主类Plugin.php的update方法中实现旧配置到新配置的迁移,确保现有用户更新后行为不变:

public function update(UpdateContext $context): void
{
    parent::update($context);

    // 仅针对1.7.3以下版本的升级操作
    if (version_compare($context->getCurrentPluginVersion(), '1.7.3', '<')) {
        $configRepo = $this->container->get('system_config.repository');
        $context = $context->getContext();

        // 查询所有店铺的旧配置
        $oldConfigCriteria = (new Criteria())->addFilter(
            new EqualsFilter('configurationKey', 'YourPluginAlias.config.reviewSkipModeration')
        );
        $oldConfigs = $configRepo->search($oldConfigCriteria, $context);

        foreach ($oldConfigs as $oldConfig) {
            $oldValue = $oldConfig->get('configurationValue');
            // 映射规则:旧false→None(值为none),旧true→0 Stars(值为0)
            $newValue = $oldValue ? '0' : 'none';

            // 插入新配置
            $configRepo->upsert([
                [
                    'salesChannelId' => $oldConfig->get('salesChannelId'),
                    'configurationKey' => 'YourPluginAlias.config.autoPublishStars',
                    'configurationValue' => $newValue,
                ]
            ], $context);

            // 删除旧配置
            $configRepo->delete([$oldConfig->getId()], $context);
        }
    }
}

注意:替换YourPluginAlias为你插件的实际别名(即composer.json中的extra.shopware.plugin.name值)

三、控制器逻辑调整

移除原有基于reviewSkipModeration的判断逻辑,替换为新配置的星级判断,同时实现需求中“像访问0一样访问None选项”的处理:

// 控制器中处理评论状态的代码段
use Shopware\Core\Content\Product\Aggregate\ProductReview\ProductReviewEntity;

// 获取新配置值
$autoPublishStars = $this->configuration->getAutoPublishStars();
$shouldAutoPublish = false;

// 处理None选项:值为none时不自动发布,其他情况判断星级
if ($autoPublishStars !== 'none') {
    $reviewRating = $productReview->getRating(); // 假设评论实体的星级字段为rating(值1-5)
    // 0代表所有星级自动发布,其余值判断评论星级是否≥配置值
    $shouldAutoPublish = $autoPublishStars === '0' || $reviewRating >= (int)$autoPublishStars;
}

// 设置评论状态
$productReview->setStatus(
    $shouldAutoPublish ? ProductReviewEntity::STATUS_APPROVED : ProductReviewEntity::STATUS_PENDING
);

四、额外注意事项

  • 更新插件的composer.json版本号为1.7.3
  • 在CHANGELOG.md中记录本次配置变更和功能调整
  • 测试两种升级场景:旧版本用户升级、新用户安装,确保行为符合预期

内容的提问来源于stack exchange,提问作者mlodhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:36:17