Yanıtlar:
Özel özellikler, bir varlığı tanımlamak için eklenen, ürün özellikleri, müşteri özellikleri vb. Özelliklerdir. Bunlar, EAV özelliklerinin bir alt kümesidir.
Öte yandan, uzantı öznitelikleri genellikle özel bir harici tablodan bir varlığa ek karmaşık veriler eklemek gibi daha karmaşık veri türleri için kullanılır.
Basitçe ifade etmek gerekirse, özel özellikler EAV standartlarına uygundur, oysa uzantı özellikleri, özel özelliklerin işleyemediği daha karmaşık veriler için kullanılır.
Özel özellikler , bir satıcı adına eklenen özelliklerdir . Örneğin, bir satıcının 'özelleştirilebilir' adlı ürün varlığına, bu ürünün 3. taraftan özelleştirilip özelleştirilmeyeceği bilgisini kaydetmek istediği özel özellikler eklemesi gerekebilir.
Hem özel hem de uzantı öznitelikleri (verileri tutmak için) biraz aynı işleve sahiptir, ancak özel öznitelikler ve uzantı öznitelikleri işlevselliği arasında önemli bir fark vardır. Örneğin
başka bir DB tablosuna katılarak uzantı özelliğine sahip ek arama ölçütleri ekleyebiliriz. İçine ACL ekleyerek doğrulayabiliriz. Şimdi biraz açıklayalım.
Lütfen aşağıdaki snippet'e bir göz atın. Bir /etc/extension_attributes.xml oluşturmanız gerekir
<config>
<extension_attributes for="Path\To\Interface">
<attribute code="name_of_attribute" type="datatype">
<resources>
<resource ref="permission"/>
</resources>
<join reference_table="" reference_field="" join_on_field="">
<field>field1</field>
<field>field2</field>
</join>
</attribute>
</extension_attributes>
</config>
Uzantı niteliklerini arama: Birleştirme etiketinde, katılmak istediğiniz tabloyu tanımlayabilir ve bu tablodan veri alabilirsiniz. Gelen reference_table özniteliği sen ise tablo adını vermek zorunda reference_field hangi size ilişkiyi koymak birincil anahtar (bu uzantı özniteliği bu örnekte ürünleri gibi oluşturduğunuz için ilk tablo anahtarı) olacak / katılmak. join_on_field adından da anlaşılacağı gibi, kayıtlarını istediğimiz ikinci PK tabloları olacaktır. Alan etiketleri altına veri almak istediğiniz tüm zorunlu alanları ekleyebilirsiniz
Uzantı özniteliği kimlik doğrulaması: etiketi kullanarak bu belirli uzantı özniteliği değerini kısıtlayabilirsiniz. Bunu anlamak için Bir örnek verelim. Diyelim ki ürünler için birden fazla uzantı özelliğimiz var ve bunlardan biri extra_special_price'i bunu tüm kullanıcılara göstermek istemediğimizi söylüyor. Bu özelliği kısıtlayabiliriz. Aşağıdaki kod parçasına bir göz atın.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="Magento\Catalog\Api\Data\ProductInterface">
<attribute code="stock_item" type="Magento\CatalogInventory\Api\Data\StockItemInterface">
<resources>
<resource ref="Magento_CatalogInventory::cataloginventory"/>
</resources>
</attribute>
</extension_attributes>
<attribute code="logo_size" type="string">
</attribute>
</config>
Bu örnekte, stock_item özniteliği sadece Magento_CatalogInventory :: cataloginventory iznine sahip olan kullanıcılarla sınırlıdır, ancak logo_size üzerinde herhangi bir koşul yoktur.
Bu nedenle, şimdi mevcut nesne kataloginventory için izinlere sahipse ürün nesnesi (api veya web üzerinden herhangi bir şekilde) alırsanız, yalnızca stock_items değerleri alır.
Bu sorunun kapsamı dışındadır, ancak aşağıdaki bağlantıda custom_extension kullanarak özniteliği nasıl oluşturacağınıza çok basit bir şekilde göz atın: extension_attributes nasıl oluşturulur