我有一个Shopware 6插件,目前使用布尔配置reviewSkipModeration
值,自动发布通过插件提交的任何评论:config.xml
<input-field type="bool">
<name>reviewSkipModeration</name>
<label>Accept reviews automatically</label>
<defaultValue>true</defaultValue>
</input-field>
该插件的当前版本是1.7.2。在新版本1.7.3中,我想删除reviewSkipModeration
布尔配置并添加新的autoPublishStars
多选配置:config.xml
<input-field type="single-select">
<name>autoPublishStars</name>
<label>Auto Publish review with stars</label>
<label lang="de-DE">Sterne vorausgewählt</label>
<defaultValue>0</defaultValue>
<options>
<option>
<id>None</id>
<name>None</name>
<name lang="de-DE">None</name>
</option>
<option>
<id>0</id>
<name>0 Stars</name>
<name lang="de-DE">0 Stars</name>
</option>
<option>
<id>1</id>
<name>1 Star</name>
<name lang="de-DE">1 Stern</name>
</option>
<option>
<id>2</id>
<name>2 Stars</name>
<name lang="de-DE">2 Sterne</name>
</option>
<option>
<id>3</id>
<name>3 Stars</name>
<name lang="de-DE">3 Sterne</name>
</option>
<option>
<id>4</id>
<name>4 Stars</name>
<name lang="de-DE">4 Sterne</name>
</option>
<option>
<id>5</id>
<name>5 Stars</name>
<name lang="de-DE">5 Sterne</name>
</option>
</options>
</input-field>
当前的逻辑是在一个控制器中实现的。当我想为新版本删除if (!$this->config->getReviewSkipModeration()) {...}
时,应该在控制器中做哪些更改?:
$commentStatus = true;
if($reviewPoints < $this->config->getAutoPublishStars()){
$commentStatus = !$commentStatus;
}
if (!$this->config->getReviewSkipModeration()) {
$commentStatus = false;
}
$create = [
'productId' => $sArticleId,
'customerId' => $customer->getCustomerId(),
'salesChannelId' => $salesChannelContext->getSalesChannel()->getId(),
'languageId' => $salesChannelContext->getContext()->getLanguageId(),
'externalUser' => $this->anonymizeName($isAnon, $customer),
'externalEmail' => $orderNumberAsEmail,
'title' => $commentHeadline,
'content' => $commentContent,
'points' => $reviewPoints,
'status' => $commentStatus,
];
我想将布尔配置功能迁移到新版本,以避免在更新期间更改现有用户的默认行为,以使用以下选项进行多选配置。如何将“None”从Roll.xml使用到控制器?我可以像在控制器中访问“0”一样访问“None”选项吗?:
- 没有一
- 0星
- 1颗星星
- 2星
- 3星
- 4星
- 5星
在我的更新方法中,我如何正确迁移数据,以便:
- 假Map到无
- 真实Map0星
我的更新功能的插件看起来像:
public function update(UpdateContext $context): void {
parent::update($context);
}
但我不知道如何处理Map。任何帮助是感激!
1条答案
按热度按时间nukf8bse1#
如果我理解正确的话,你应该从改变你的更新方法开始,你可以检查旧的bool配置是真还是假,然后将其Map到相应的新的多选配置
如果你使用的是PHP 8,那么在这之后你可以使用一个简单的[switch][1]或[match][2]来实现不同的选项
我想这可能真的对你有用,如果它没有,我们可以一起头脑 Storm 一个解决方案[1]:https://www.php.net/manual/fr/control-structures.switch.php [2]:https://www.php.net/manual/en/control-structures.match.php