Magento 2 kaldırma modülü


13

Görünüşe göre, şimdi Magento 2, bir modülü (horay !!) kaldırırken db şeması değişikliğine izin veren kaldırma komut dosyalarını destekliyor.
Burada açıklandığı gibi, bu sadece besteci aracılığıyla kurulan modül için çalışır.
(Umarım gelecekte tüm modüller için çalışır, ancak bu farklı bir konudur).
Diyelim ki bir modülüm var Testing_Demo.
Bu modül, kaldırırken kaldırmak istediğim 3 şey yapıyor.

  1. adlı bir tablo ekler testing_demo. Bu yüzden bırakmam gerek.
  2. adlı bir ürün özelliği ekler demo. Yani bunun kaldırılması gerekiyor
  3. , system->configurationtabloda depolanabilecek veya depolanmayacak bazı ayarlara sahiptir core_config_data. Tüm bu ayarların yolu vardır testing_demo/.... Yani bunların da kaldırılması gerekiyor.

Modül kaldırma komut dosyam nasıl olmalı?


Sanırım kaldırma komut dosyanız, uzantılarınızın kaldırılmasının ön uç veya şema ilişkilerine uygun olup olmadığını görmek için bir entegrasyon testi gibi olmalı
Anton S

Orada seninle çelişemem. muhtemelen haklısın, ama bunu nasıl yaparım? :)
Marius

Hiçbir fikrim jet yok ama teorik olarak, topladığınız verilerin düşüp düşmeyeceğini bilmelisiniz ve bu nedenle kaldırma işlemi, bir satıcıya aşağıdaki işlemin muhasebe üzerindeki ticari yükümlülükler üzerinde etkisi olup olmadığını doğrulaması talimatını veren adım adım bir rehber olmalıdır. , istemciler vb. Bu nedenle, tamamen teknik olan bölümün düzenleri geçmesi ve uzantınıza başvurulup başvurulmadığını, uzatıldığını, diğerlerinin tüm uzantılara eşit olan vb. çatışmalar işaret
Anton S

bağımlılık kaldırma önce ele alınmalıdır, bu yüzden bu benim sorunum değil. Diyelim ki uzantıyı tamamen kaldırmaya karar verdim ve buna bağlı hiçbir şey yok.
Marius

Yani bunu sadece düz döküm tablolarına ve şeylerin veri tarafına daraltmanız mı gerekiyor?
Anton S

Yanıtlar:


18

İçin kodların aranıyor UninstallInterfaceverir \Magento\Setup\Model\UninstallCollector.

Eğer ararsanız UninstallCollectoro zaman, kullanılan budur bulacaksınız \Magento\Setup\Console\Command\ModuleUninstallCommand. Özellikle ilgili:

    $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>");
        }
    }

Bir araya getir, tahmin edebiliriz:

  1. Modülünüzde bir Uninstallsınıf içermelidir {module}\Setup\Uninstall.php.
  2. Bu sınıf uygulanmalıdır Magento\Framework\Setup\UninstallInterface.
  3. Bu sınıf, uninstallgerekli mantığı içeren bir yönteme sahip olmalıdır .
  4. Herhangi bir kurulum veya yükseltme komut dosyasında olduğu gibi aynı nesneleri ve yöntemleri kullanabilirsiniz.

İşte iskeletiniz:

<?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();
    }
}

Uygun yöntemleri kullanarak tabloları, sütunları veya verileri kaldırın. Bkz \Magento\Framework\DB\Adapter\AdapterInterfacegibi kullanılabilen $setup->getConnection().


Cevap için teşekkürler. Test edeceğim ve bir sonuçla geri döneceğim.
Marius

@Marius, bunun sizin için çalışıp çalışmadığından bahsetmediniz. Ayrıca bu kaldırma komut dosyası doğrudan çalışır veya modül çalıştırdığınızda tetiklenir bilmek istiyorum: uninstall
Adnan

1
@Adnan. Evet. İşe yaradı. Konsol komutu çalıştırıldığında komut dosyası çağrıldığında modül kaldırılır.
Marius

@Marius, Bir ekibiniz olması durumunda, diğer geliştiriciler ne yapmalı? her biri yerel olarak komut çalıştırmak gerekir? Bir sonraki çekimle otomatik olarak çalıştırmak için herhangi bir durum var mı?
sergio

[İstisna] Kullanımdan Kaldırıldı İşlevsellik: Sınıflarıyla aynı ada sahip yöntemler PHP'nin gelecekteki bir sürümünde yapıcı olmayacaktır; Uninstall, kullanımda kaldırıldı ... / Kurulum / Kaldır .php on line 5
Pini
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.