gpt4 book ai didi

plugins - Shopware 6 - 在插件卸载时删除自定义字段

转载 作者:行者123 更新时间:2023-12-04 02:27:19 25 4
gpt4 key购买 nike

我创建了一个自定义服务,它在插件安装期间在客户表单中创建自定义字段。激活插件时,服务正常运行并执行所需的功能。

public function activate(ActivateContext $context): void
{
../
$customFieldSetService = $this->container->get('custom.service');
$customFieldSetService->extendCustomerFields();
/..
}

卸载插件时,我收到错误消息:您请求了一个不存在的服务“custom.service”。

public function uninstall(UninstallContext $context): void
{
../
$customFieldSetService = $this->container->get('custom.service');
$customFieldSetService->deleteCustomerFields();
/..
}

服务.xml:

<service id="custom.service" class="MyPlugin\Service\CustomFieldSetService" public="true" />

如何在卸载函数中调用我自己的服务?

最佳答案

让我快速向您展示一个例子,说明我们是如何做到的。我猜代码应该是不言自明的:)

public function uninstall(UninstallContext $uninstallContext): void
{
if ($uninstallContext->keepUserData()) {
parent::uninstall($uninstallContext);

return;
}

$this->removeCustomField($uninstallContext);

parent::uninstall($uninstallContext);
}

private function removeCustomField(UninstallContext $uninstallContext)
{
$customFieldSetRepository = $this->container->get('custom_field_set.repository');

$fieldIds = $this->customFieldsExist($uninstallContext->getContext());

if ($fieldIds) {
$customFieldSetRepository->delete(array_values($fieldIds->getData()), $uninstallContext->getContext());
}
}

private function customFieldsExist(Context $context): ?IdSearchResult
{
$customFieldSetRepository = $this->container->get('custom_field_set.repository');

$criteria = new Criteria();
$criteria->addFilter(new EqualsAnyFilter('name', ['your_custom_fieldset']));

$ids = $customFieldSetRepository->searchIds($criteria, $context);

return $ids->getTotal() > 0 ? $ids : null;
}

关于plugins - Shopware 6 - 在插件卸载时删除自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66546930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com