Magento 2 Özel modül tarafından eklenen özellikler nasıl kaldırılır?


11

Şimdiye kadar, özel bir modülü kaldırırken, özel modül tarafından eklenen özel tabloları veya sütunları uninstall.phphangi uzantıları kullanarak kaldırmak mümkün olduğunu biliyorum \Magento\Framework\Setup\UninstallInterface. Ancak InstallData.phpmodülü kaldırırken eklenen özel nitelikler nasıl kaldırılır? Şimdiden teşekkürler!



@Abdul Bu yazıyı daha önce okudum. Ancak nitelikleri kaldırma yönteminden bahsetmez.
Ricky.C

Belirli bir tablodaki değerleri mi kastediyorsunuz?
Maddy

Yanıtlar:


13

Bir modülde, kaldırma için bağımlılık enjeksiyonunu kullanan aşağıdaki kodu kullanırsınız. Başka herhangi bir yerde eşit derecede iyi çalışır, sadece EavSetupFactory'yi yapıcıya enjekte ettiğinizden emin olun ve ardından işi yapmak için yöntemlerini kullanın.

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

        }
    }

}

Ayrıca, bu yöntemi kullanmak, eav özniteliğinin tüm tablolardan düzgün şekilde kaldırılmasına neden olur, çünkü kısıtlamalar kullanılarak bağlanırlar.

BTW, PHPStorm + xdebug kullanmanızı öneririm. Tüm bu şeylerin birbirine nasıl bağlandığı hakkında çok şey öğreneceksiniz.


Hangi dosya ve nereye gidiyor?
Mark

Onun Uninstall.php. Modül kurulum klasörüne gider. Ad alanını kontrol edin. Her zaman yol adıyla eşleşmelidir.
CarComp

1
Ayrıca kullanabilir Customer::ENTITYveya Product::ENTITYyerine vs 1 ya 4. ( use Magento\Catalog\Model\Product; use Magento\Customer\Model\Customer;)
Jānis Elmeris

2

Bunun için kullanabilirsiniz \Magento\Eav\Api\AttributeRepositoryInterface::delete.


Doğru, ancak ima ettiği gibi özel bir modül inşa ediyor, bu da yaratma ve silme yönteminin programatik olduğunu varsaymak anlamına geliyor. Api'yi kullanmak biraz yanlış bir yaklaşımdır, ancak AttributeRepositoryInterface'ten aslında işi yapan sınıfa ve yöntemlere geri dönebilirsiniz .
CarComp

1
@CarComp, Magento'nun yeni sürümü üzerinde modülünüzün çalışmasıyla ilgileniyorsanız, API'yi kullanmak sadece bir uygun yaklaşımdır. Magento BC politikasını sadece api için kullanıyor. Ve özel uygulama herhangi bir zamanda bildirimde bulunmaksızın değiştirilebilir
KAndy

Sadece yazdıklarımı tekrar okudum. Herkes için yanlış bir yaklaşım olduğunu söylemiyorum, sadece onun sorusuyla ilgili demek istedim. Php bunu nasıl soruyordum.
CarComp

1
API - Web API'sı ile değil @api ek açıklamasıyla arayüz oluşturur. Üzgünüm eğer bir şey eksik
understudy

1

1 ve 2 gibi varlık kimliği yerine Magento \ Customer \ Model \ Customer sınıfı kullanın.

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

Mutlu Kodlama !!


Teşekkürler kardeşim çözümün sorunumu çözdü!
Faysal Şeyh
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.