Magento 2 제거 모듈
-
13-12-2019 - |
문제
분명히 이제 Magento 2는 모듈을 제거할 때 db 스키마 수정을 허용하는 제거 스크립트를 지원합니다(horay!!).
여기에 설명된 대로 이는 작곡가를 통해 설치된 모듈에서만 작동합니다.
(향후 모든 모듈에서 작동하길 바라지만, 그건 다른 문제입니다.)
다음과 같은 모듈이 있다고 가정해 보겠습니다. 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()
.
제휴하지 않습니다 magento.stackexchange