簡體   English   中英

Shopware 6 - 在插件卸載時刪除自定義字段

[英]Shopware 6 - Delete custom fields on plugin uninstall

我創建了一個自定義服務,它在插件安裝期間在客戶表單中創建自定義字段。 激活插件時,服務正常運行並執行所需的 function。

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" />

如何在卸載 function 中調用我自己的服務?

讓我快速向您展示我們如何做到這一點的示例。 我猜代碼應該是不言自明的:)

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;
    }

你不能像之前卸載你的插件被停用一樣調用它。 一旦它被停用,來自該插件的所有服務都會從服務容器中刪除並且無法調用。 您可以直接在卸載方法中創建服務實例。 我認為這是最好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM