마 젠토 2 제거 모듈


13

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

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

모듈 제거 스크립트는 어떻게 생겼습니까?


제거 스크립트가 확장 테스트가 프론트 엔드 나 스키마 관계
Anton S

나는 당신과 모순 될 수 없습니다. 당신 말이 맞을 수도 있지만 어떻게해야합니까? :)
Marius

나는 제트기를 모르지만 이론적으로는 수집 한 데이터를 삭제할 수 있는지 여부를 알아야하므로 제거 프로세스는 단계별 지침으로 판매자에게 다음 프로세스가 회계에 대한 판매자 부채에 영향을 미치는지 확인하도록 지시합니다. 클라이언트 등 따라서 순전히 기술적 인 부분은 레이아웃을 순회하기 쉽고 아마도 확장이 참조되고 확장되었는지, 다른 확장은 모든 확장에 대해 균일 한 부분에 의존하지만 비즈니스 결정은 여전히 ​​판매자의 결정에 달려 있습니다. 충돌 지적
Anton S

제거 전에 종속성을 처리해야하므로 내 문제가 아닙니다. 확장 프로그램을 완전히 제거하기로 결정했다고 가정 해 봅시다.
Marius

그래서 당신은 이것을 일반 덤프 테이블과 데이터 측면으로 좁힐 필요가 있습니까?
Anton S

답변:


18

코드베이스를 검색하면 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().


답변 해주셔서 감사합니다. 테스트하고 결과로 돌아올 것입니다.
Marius

@Marius 당신을 위해 작동하는지 여부는 언급하지 않았습니다. 또한이 제거 스크립트가 직접 실행되는지 또는 module : uninstall
Adnan

1
@Adnan. 예. 효과가있었습니다. 콘솔 명령을 실행할 때 스크립트가 호출되어 모듈을 설치 제거하십시오.
Marius

@Marius, 팀이있는 경우 다른 개발자는 어떻게해야합니까? 각각 로컬로 명령을 실행해야합니까? 다음 풀로 자동 실행하는 경우가 있습니까?
sergio

[예외] 더 이상 사용되지 않는 기능 : 클래스와 이름이 같은 메소드는 이후 버전의 PHP에서 생성자가 될 수 없습니다. 5 번 라인의 ... / Setup / Uninstall .php에서 제거 프로그램에 더 이상 사용되지 않는 조정자가 있습니다
Pini
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.