문제

분명히 이제 Magento 2는 모듈을 제거할 때 db 스키마 수정을 허용하는 제거 스크립트를 지원합니다(horay!!).
여기에 설명된 대로 이는 작곡가를 통해 설치된 모듈에서만 작동합니다.
(향후 모든 모듈에서 작동하길 바라지만, 그건 다른 문제입니다.)
다음과 같은 모듈이 있다고 가정해 보겠습니다. Testing_Demo.
이 모듈은 제거 시 제거하고 싶은 3가지 작업을 수행합니다.

  1. 라는 테이블을 추가합니다 testing_demo.그래서 나는 그것을 버려야 한다.
  2. 라는 제품 속성을 추가합니다. demo.그래서 이건 제거해야함
  3. 몇 가지 설정이 있습니다 system->configuration 테이블에 저장될 수도 있고 저장되지 않을 수도 있는 것 core_config_data.이 모든 설정에는 경로가 있습니다 testing_demo/....따라서 이것들도 제거해야 합니다.

내 모듈 제거 스크립트는 어떻게 생겼나요?

도움이 되었습니까?

해결책

코드베이스 검색 중 UninstallInterface 준다 \Magento\Setup\Model\UninstallCollector.

검색하시면 UninstallCollector 그러면 다음에서 사용되는 것을 알 수 있습니다. \Magento\Setup\Console\Command\ModuleUninstallCommand.특히 관련성:

    $uninstalls = $this->collector->collectUninstall();
    $setupModel = $this->objectManager->get('Magento\Setup\Module\Setup');
    foreach ($modules as $module) {
        if (isset($uninstalls[$module])) {
            $output->writeln("<info>Removing data of $module</info>");
            $uninstalls[$module]->uninstall(
                $setupModel,
                new ModuleContext($this->moduleResource->getDbVersion($module) ?: '')
            );
        } else {
            $output->writeln("<info>No data to clear in $module</info>");
        }
    }

종합해보면 다음과 같이 추측할 수 있습니다.

  1. 모듈에는 다음이 포함되어야 합니다. Uninstall 수업 {module}\Setup\Uninstall.php.
  2. 이 클래스는 구현해야합니다 Magento\Framework\Setup\UninstallInterface.
  3. 이 수업에는 uninstall 필요한 로직을 포함하는 메서드입니다.
  4. 모든 설정 또는 업그레이드 스크립트에서와 동일한 개체 및 메서드를 사용할 수 있습니다.

뼈대는 다음과 같습니다.

<?php

namespace \Custom\Module\Setup;

class Uninstall implements \Magento\Framework\Setup\UninstallInterface
{
    /**
     * Module uninstall code
     *
     * @param \Magento\Framework\Setup\SchemaSetupInterface $setup
     * @param \Magento\Framework\Setup\ModuleContextInterface $context
     * @return void
     */
    public function uninstall(
        \Magento\Framework\Setup\SchemaSetupInterface $setup,
        \Magento\Framework\Setup\ModuleContextInterface $context
    ) {
        $setup->startSetup();

        // Uninstall logic here

        $setup->endSetup();
    }
}

적절한 방법을 사용하여 테이블, 열 또는 데이터를 제거합니다.보다 \Magento\Framework\DB\Adapter\AdapterInterface, 다음과 같이 사용 가능 $setup->getConnection().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top