ম্যাজেন্টো 2 আনইনস্টল মডিউল


13

স্পষ্টতই, এখন ম্যাজেন্টো 2 আনইনস্টল স্ক্রিপ্টগুলিকে সমর্থন করে যা মডিউলটি আনইনস্টল করার সময় ডিবি স্কিমা পরিবর্তনের অনুমতি দেয় (হোরে !!)।
এখানে বর্ণিত হিসাবে এটি কেবল সুরকারের মাধ্যমে ইনস্টল হওয়া মডিউলটির জন্য কাজ করে।
(আমি আশা করি এটি ভবিষ্যতে সমস্ত মডিউলগুলির জন্য কাজ করবে, তবে এটি একটি ভিন্ন বিষয়)।
ধরা যাক আমার কাছে একটি মডিউল আছে Testing_Demo
এই মডিউলটি 3 টি কাজ করে যা আমি আনইনস্টল করার সময় অপসারণ করতে চাই।

  1. বলা একটি টেবিল যোগ করুন testing_demo। সুতরাং আমি এটি ড্রপ করা প্রয়োজন।
  2. নামক একটি পণ্য বৈশিষ্ট্য যুক্ত করে demo। সুতরাং এটি অপসারণ করা প্রয়োজন
  3. এতে কিছু সেটিংস system->configurationথাকতে পারে যা হয়ত টেবিলের মধ্যে সঞ্চয় করা যায় না core_config_data। এই সমস্ত সেটিংসের পথ রয়েছে testing_demo/...। সুতরাং এগুলিও অপসারণ করা দরকার।

আমার মডিউলের আনইনস্টল স্ক্রিপ্টটি কেমন হওয়া উচিত?


আমার ধারণা আপনার আনইনস্টলেশন স্ক্রিপ্টটি আরও একীকরণের পরীক্ষার মতো হওয়া উচিত তা দেখার জন্য আপনার এক্সটেনশানগুলি সরানো সীমানা বা স্কিমা সম্পর্কগুলিকে উত্সাহিত করবে কিনা
অ্যান্টন এস

আমি সেখানে আপনার সাথে বিরোধিতা করতে পারি না। আপনি সম্ভবত সঠিক, কিন্তু আমি কিভাবে এটি করব? :)
মারিয়াস

আমার কোনও ধারণা জেট নেই তবে তাত্ত্বিকভাবে আপনার জানা উচিত যে আপনার সংগৃহীত ডেটা বাদ যাবে কিনা এবং তাই আনইনস্টল প্রক্রিয়াটি ধাপে গাইড হওয়া উচিত যা কোনও ব্যবসায়ীকে যাচাইয়ের জন্য নীচের প্রক্রিয়াটির অ্যাকাউন্টিংয়ের উপর মার্চেন্টের দায়বদ্ধতার উপর প্রভাব ফেলে কিনা তা যাচাই করতে নির্দেশ দেয় verify , ক্লায়েন্ট ইত্যাদি। সুতরাং খাঁটি প্রযুক্তিগত অংশটি সম্ভবত লেআউটগুলি অতিক্রম করা সহজ এবং আপনার এক্সটেনশানটি রেফারেন্সযুক্ত, প্রসারিত, অন্যগুলি ইত্যাদির উপর নির্ভর করে যা সমস্ত এক্সটেনশনের ক্ষেত্রে অভিন্ন তবে পিছনে ব্যবসায়ের সিদ্ধান্তগুলি এখনও বণিকের সিদ্ধান্ত নিতে পারে এবং আপনি কেবল পারেন বিবাদগুলি দেখান
অ্যান্টন এস

আনইনস্টল করার আগে নির্ভরতা পরিচালনা করা উচিত তাই এটি আমার সমস্যা নয়। ধরা যাক আমি এক্সটেনশনটি পুরোপুরি সরিয়ে নেওয়ার সিদ্ধান্ত নিয়েছি এবং এর উপর নির্ভর করে কিছুই নেই।
মারিয়াস

সুতরাং আপনার কেবল এটি সরল ডাম্পিং টেবিল এবং জিনিসগুলির উপাত্তের দিকে সংকীর্ণ করা দরকার?
আন্তন এস

উত্তর:


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

@ মারিয়াস আপনি উল্লেখ করেন নি যে এটি আপনার পক্ষে কাজ করছে কিনা। অতিরিক্ত হিসাবে আমি জানতে চাই যে এই আনইনস্টল স্ক্রিপ্টটি সরাসরি চলবে বা যখন আমরা মডিউল চালাব তখন এটি ট্রিগার হবে: আনইনস্টল করুন
আদনান

1
@Adnan। হ্যাঁ. এটা কাজ করেছে. কনসোল কমান্ডটি চালানোর সময় স্ক্রিপ্টটি ডাকা হয় মডিউলটি আনইনস্টল করুন।
মারিয়াস

@ মারিয়াস, আপনার যদি একটি দল থাকে তবে অন্যান্য বিকাশকারীদের কী করা উচিত? তাদের প্রত্যেককে স্থানীয়ভাবে কমান্ড চালানো উচিত? পরের টান দিয়ে স্বয়ংক্রিয়ভাবে চালানোর জন্য কি কোনও মামলা আছে?
সার্জিও

[ব্যতিক্রম] অবহেলিত কার্যকারিতা: তাদের শ্রেণীর মতো একই নামের পদ্ধতিগুলি পিএইচপি-র ভবিষ্যতের সংস্করণে নির্মাতা হবে না; আনইনস্টল লাইন 5 সালে ... / সেটআপ / আনইনস্টল .php একটি অননুমোদিত সহ nstructor হয়েছে
Pini
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.