Magento 2 अनइंस्टॉल मॉड्यूल


13

जाहिरा तौर पर, अब Magento 2 उन स्क्रिप्ट्स को अनइंस्टॉल करने का समर्थन करता है, जो किसी मॉड्यूल (horr) की स्थापना रद्द करते समय db स्कीमा संशोधन की अनुमति देता है।
जैसा कि यहां बताया गया है कि यह केवल संगीतकार के माध्यम से स्थापित मॉड्यूल के लिए काम करता है।
(मुझे उम्मीद है कि यह भविष्य में सभी मॉड्यूल के लिए काम करेगा, लेकिन यह एक अलग मुद्दा है)।
मान लीजिए कि मेरे पास एक मॉड्यूल है जिसे कहा जाता है Testing_Demo
यह मॉड्यूल 3 चीजें करता है जिन्हें मैं इसे अनइंस्टॉल करते समय हटाना चाहूंगा।

  1. नामक एक टेबल जोड़ता है testing_demo। इसलिए मुझे इसे गिराने की जरूरत है।
  2. नामक एक उत्पाद विशेषता जोड़ता है demo। इसलिए इसे हटाने की जरूरत है
  3. इसमें कुछ सेटिंग्स हैं system->configurationया तालिका में संग्रहीत नहीं किया जा सकता है core_config_data। इन सभी सेटिंग्स में रास्ता है testing_demo/...। इसलिए इन्हें भी हटाने की जरूरत है।

मेरा मॉड्यूल अनइंस्टॉल स्क्रिप्ट कैसे दिखना चाहिए?


मुझे लगता है कि आपकी स्थापना स्क्रिप्ट एक एकीकरण परीक्षण की तरह अधिक होनी चाहिए, यह देखने के लिए कि क्या आपके एक्सटेंशन हटाने से फ्रंटएंड या स्कीमा संबंध समाप्त हो जाएंगे
एंटोन एस

मैं वहां आपका विरोध नहीं कर सकता। आप शायद सही हैं, लेकिन मैं ऐसा कैसे करूं? :)
मेरियस

मेरे पास कोई विचार जेट नहीं है, लेकिन सिद्धांत रूप में आपको पता होना चाहिए कि क्या आपके द्वारा एकत्र किए गए डेटा को गिराया जा सकता है या नहीं और इसलिए स्थापना रद्द करने की प्रक्रिया को एक कदम से कदम गाइड होना चाहिए जो एक व्यापारी को यह सत्यापित करने का निर्देश देता है कि क्या लेखांकन पर निम्न देयताओं का व्यापारी पर प्रभाव पड़ता है , क्लाइंट्स आदि पर। इसलिए जो हिस्सा विशुद्ध रूप से तकनीकी है, संभवतया लेआउट को पार करना आसान है और यह देखें कि क्या आपका एक्सटेंशन संदर्भित है, विस्तारित है, अन्य आदि भागों के आधार पर हैं जो सभी एक्सटेंशन के लिए समान हैं लेकिन पीछे के व्यापारिक निर्णय अभी भी व्यापारी के लिए तय करने के लिए हैं और आप केवल कर सकते हैं बिंदुओं को इंगित करें
एंटोन एस

निर्भरता की स्थापना रद्द करने से पहले संभाला जाना चाहिए ताकि यह मेरी समस्या न हो। मान लीजिए कि मैंने एक्सटेंशन को पूरी तरह से हटाने का फैसला किया है, और इसके आधार पर कुछ भी नहीं है।
मेरियस

तो आप बस यह नीचे सादे डंपिंग टेबल और चीजों के डेटा पक्ष को संकीर्ण करने की आवश्यकता है?
एंटोन एस

जवाबों:


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()


जवाब के लिए धन्यवाद। मैं परीक्षण करूंगा और एक परिणाम के साथ वापस आऊंगा।
मेरियस

@ आप का उल्लेख नहीं किया है कि यह आपके लिए काम कर रहा है या नहीं। इसके अतिरिक्त, मैं जानना चाहूंगा कि यह स्क्रिप्ट की स्थापना सीधे चलाता है या जब हम मॉड्यूल चलाते हैं तो यह ट्रिगर हो जाएगा: स्थापना रद्द करें
Adnan

1
@Adnan। हाँ। इसने काम कर दिया। कंसोल कमांड चलाते समय स्क्रिप्ट को मॉड्यूल की स्थापना रद्द करने के लिए कहा जाता है।
मारियस

@ मार्स, यदि आपके पास एक टीम है, तो अन्य डेवलपर्स को क्या करना चाहिए? उनमें से प्रत्येक को स्थानीय रूप से कमांड चलाना चाहिए? क्या अगले पुल के साथ इसे स्वचालित रूप से चलाने का कोई मामला है?
सर्जियो

[अपवाद] पदावनत कार्यशीलता: एक ही नाम वाले तरीके जैसे कि उनकी कक्षा PHP के भविष्य के संस्करण में कोई निर्माता नहीं होगी; अनइंस्टॉल में एक पदावनत सह nstructor है ... / सेटअप / अनइंस्टॉल। 5 पंक्ति पर
Pini
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.