Magento 2 müşteri grubu şeklinde özel alan nasıl kaydedilir?


9

Kullanarak müşteri grubu biçimine bazı özel alanlar ekledim upgradeSchema.php.

Bundan sonra, müşteri grubu kodu ve vergi kimliği gibi orijinal alanların sağlanan API'deki setter yöntemleri kullanılarak kaydedildiğini buldum. Kaydetmek için setXXX () kullanan Magento 1.X'ten tamamen farklıdır.


\ Magento \ Müşteri \ Api \ Data \ GroupInterface $ customerGroup-> setData ('program_type', $ programType); program_type, veritabanına kaydetmek için 'program_type' tablo sütununa karşılık gelir, ancak başarısız olur.
Ricky.C

Alanları kaydetmek için alıcı ve ayarlayıcı ile özel bir API yazmalı mıyım?
Ricky.C

Yanıtlar:


23

Bu durumda uzantı nitelikleri mekanizması kullanılmalıdır. Temel API'lerin 3. taraf modüller tarafından genişletilmesine izin verir. Yeni uzantı özelliğini etkinleştirmek için genel adımlar:

  1. Uzatma özelliğini resmi dokümanlarda açıklandığı şekilde bildirin . Silindikten varve çalıştırıldıktan sonra <project_root>/bin/magento setup:di:compile, bu yeni özellik için karşılık gelen ayarlayıcı ve alıcı görünmelidir \Magento\Customer\Api\Data\GroupExtensionInterface(bu arayüz otomatik olarak oluşturulur)
  2. İçin Yaz eklentileri \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById(ve gerektiğinde başka bir hizmet yöntemleri) kurtarmak için / yük Yeni bir öznitelik. Bir uzantı geliştiricisi olarak, bu özelliğin nerede depolanması gerektiğini yalnızca siz bilirsiniz, herhangi bir tablo olabilir. \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSaveÖrnek olarak bakın
  3. Bu özelliği koleksiyonda görünür hale getirmeniz gerekiyorsa (aranabilir / filtrelenebilir hale getirmek için), joindüğümü bildirin . Değilse, bunu atla
  4. Özel özelliğinize şu şekilde uygulanır: $customerGroup->getExtensionAttributes()->getMyAttribute()burada customerGroupuygulanır \Magento\Customer\Api\Data\GroupInterface. setMyAttribute()de kullanılabilir

Aşağıda, konulması gereken yapılandırma örneği verilmiştir. VendorName/ModuleName/etc/extension_attributes.xml

<?xml version="1.0"?>
<config>
    <extension_attributes for="Magento\Customer\Api\Data\GroupInterface">
        <!--Data interface can be used as a type of attribute, see example in CatalogInventory module-->
        <attribute code="name_of_attribute" type="string">
            <resources>
                <resource ref="VendorName_ModuleName::someAclNode"/>
            </resources>
            <!--Join is optional, only if you need to have added attribute visible in groups list-->
            <join reference_table="table_where_attribute_is_stored" reference_field="group_id_field_in_that_table" join_on_field="group_id">
                <field>name_of_added_attribute_field_in_that_table</field>
            </join>
        </attribute>
    </extension_attributes>
</config>

Extension_attributes.xml eklemeye çalıştım, ancak yeni bir arayüz oluşturulmadı. ps Nesil klasörünü sildim ve biraz işlem
başlattım

Extension_attribute.xml: <? Xml version = "1.0"?> <config> <extension_attributes = "Magento \ Customer \ Api \ Data \ GroupInterface"> <özellik kodu = "grup_alanadı" type = "dize" /> </ extension_attributes> </config>
Ricky.C

Dosyaya extension_attributes.xml (çoğul) adı verilmelidir. CLI kullanarak tüm otomatik olarak oluşturulmuş varlıkların oluşturulmasını başlatmayı deneyin.
Alex Paliarush

Yukarıdaki yorum yazım hatası için üzgünüm, aslında dosya uzantısı_attributes.xml
Ricky.C

Google'ı aradım ama hiçbir şey bulamadım. Hangi komutun kullanılması gerektiğini bana bildirir misiniz? Ben kayağa aşina olmayan yeni bir gelenekim. Teşekkürler.
Ricky.C

2

Bir modülün register.phpiçinde bir dosyaya ihtiyaç duyduğunu ve bin/magento module:enable VendorName_ModuleNamegösterilmeden önce kullanmanız gerektiğini unutmayın !

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.