분명히 Magento 2는 모듈을 제거 할 때 db 스키마 수정을 허용하는 제거 스크립트를 지원합니다 (horay !!).
여기에 설명 된대로 이것은 composer를 통해 설치된 모듈에서만 작동합니다.
(향후 모든 모듈에서 작동하기를 희망하지만 다른 문제입니다).
이라는 모듈이 있다고 가정 해 봅시다 Testing_Demo
.
이 모듈은 제거 할 때 제거하고 싶은 3 가지 작업을 수행합니다.
- 라는 테이블을 추가합니다
testing_demo
. 그래서 떨어 뜨려야합니다. - 이라는 제품 속성을 추가합니다
demo
. 따라서 제거해야합니다 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>");
}
}
우리는 함께 할 수 있습니다.
- 모듈은에
Uninstall
클래스를 포함해야합니다{module}\Setup\Uninstall.php
. - 이 클래스는 구현해야합니다
Magento\Framework\Setup\UninstallInterface
. - 이 클래스에는
uninstall
필요한 논리가 포함 된 메소드 가 있어야합니다 . - 설정 또는 업그레이드 스크립트와 동일한 객체 및 방법을 사용할 수 있습니다.
여기 골격이 있습니다.
<?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()
.