Magento 2 कस्टम मॉड्यूल द्वारा जोड़े गए विशेषताओं की स्थापना रद्द कैसे करें?


11

अब तक मुझे पता है कि कस्टम मॉड्यूल की स्थापना रद्द करते समय, कस्टम मॉड्यूल द्वारा जोड़े गए कस्टम टेबल या कॉलम को निकालना संभव है, uninstall.phpजिसका उपयोग करके विस्तार होता है \Magento\Framework\Setup\UninstallInterface। लेकिन InstallData.phpमॉड्यूल की स्थापना रद्द करते समय जोड़े गए कस्टम विशेषताओं को कैसे हटाया जाए? अग्रिम में धन्यवाद!


इस तरह से अनुसरण करें: magento.stackexchange.com/questions/78221/…
अब्दुल

@ अब्दुल मैंने पहले वह पोस्ट पढ़ी है। लेकिन इसमें विशेषताओं को हटाने के लिए विधि का उल्लेख नहीं है।
रिकी। C

क्या आप एक विशिष्ट तालिका में मूल्यों का मतलब है?
मैडी

जवाबों:


13

एक मॉड्यूल में, आप निम्नलिखित कोड का उपयोग करेंगे जो स्थापना रद्द करने के लिए निर्भरता इंजेक्शन का उपयोग करता है। यह कहीं भी और कहीं भी समान रूप से काम करता है, बस निर्माण में EavSetupFactory इंजेक्षन करना सुनिश्चित करें और फिर काम करने के लिए अपने तरीकों का उपयोग करें।

<?php

namespace Company\Modulename\Setup {

    class Uninstall implements \Magento\Framework\Setup\UninstallInterface
    {

        protected $eavSetupFactory;

        public function __construct(\Magento\Eav\Setup\EavSetupFactory $eavSetupFactory)
        {
            $this->eavSetupFactory = $eavSetupFactory;
        }



        public function uninstall(\Magento\Framework\Setup\SchemaSetupInterface $setup, \Magento\Framework\Setup\ModuleContextInterface $context)
        {
            $setup->startSetup();

            $eavSetup = $this->eavSetupFactory->create();

            $entityTypeId = 1; // Find these in the eav_entity_type table
            $eavSetup->removeAttribute($entityTypeId, 'attribute_code');

            $setup->endSetup();

        }
    }

}

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

BTW, मैं PHPStorm + xdebug का उपयोग करने की सलाह देता हूं। आप इन सभी चीजों को एक साथ जोड़ने के बारे में बहुत कुछ सीखेंगे।


क्या फ़ाइल और कहाँ जाता है?
मार्क

इसका Uninstall.php। यह मॉड्यूल सेटअप फ़ोल्डर में जाता है। नामस्थान की जाँच करें। इसे हमेशा pathname से मेल खाना चाहिए।
CarComp

1
तुम भी उपयोग कर सकते हैं Customer::ENTITYया Product::ENTITYआदि के बजाय 1 या 4। ( use Magento\Catalog\Model\Product; use Magento\Customer\Model\Customer;)
जानिस एल्मेरिस

2

आप इसके लिए उपयोग कर सकते हैं \Magento\Eav\Api\AttributeRepositoryInterface::delete


यह सच है, लेकिन इसके निहितार्थ वह एक कस्टम मॉड्यूल का निर्माण कर रहा है, इसलिए इसका मतलब है कि निर्माण और विलोपन की विधि प्रोग्रामेटिक है। एपीआई का उपयोग करना कुछ हद तक गलत तरीका है, हालांकि, आप अपने तरीके को एट्रीब्यूट्रीऑपरेटरीइंटरफेस से क्लास और उन तरीकों से पीछे कर सकते हैं जो वास्तव में काम करते हैं।
20Com पर CarComp

1
यदि आप Magento के नए संस्करण पर मॉड्यूल के काम में रुचि रखते हैं, तो @CarComp, API का उपयोग करना केवल एक उचित दृष्टिकोण है। Magento केवल BC के लिए BC नीति का उपयोग करता है। और अधिसूचना के बिना किसी भी समय निजी कार्यान्वयन को बदला जा सकता है
KAndy

मैंने जो लिखा है, उसे मैंने फिर से पढ़ा। मैं इसके गलत दृष्टिकोण को सभी के लिए नहीं कह रहा हूं, मेरा मतलब सिर्फ उसके सवाल के संबंध में था। वह पूछ रहा था कि इसे php में कैसे करना है।
CarComp

1
एपीआई - यह @ एपीआई एनोटेशन के साथ इंटरफेस करता है, न कि वेब एपीआई। क्षमा करें, अगर मुझे कुछ समझ में नहीं आया
KAndy

1

1 और 2 जैसी इकाई आईडी के बजाय Magento \ Customer \ Model \ Customer वर्ग का उपयोग करें।

<?php
namespace Custom\Module\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Customer\Model\Customer;

class InstallData implements InstallDataInterface
{
private $eavSetupFactory;

public function __construct(EavSetupFactory $eavSetupFactory) 
{
 $this->eavSetupFactory = $eavSetupFactory;
}

 public function install(ModuleDataSetupInterface $setup, ModuleContextInterface 
  $context)
   {
    $setup->startSetup();

   $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
   $eavSetup->removeAttribute(Customer::ENTITY, 'attribute_code_here');

  $setup->endSetup();
  }
}

हैप्पी कोडिंग !!


धन्यवाद भाई आपके समाधान से मेरी समस्या हल हो गई!
फैसल शेख
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.