Answers:
定制属性是代表商家添加的属性。例如,商人可能需要向名为“ customizeable”的产品实体添加自定义属性,在该实体中,他想保存有关该产品是否将由第三方进行定制的信息。
自定义属性和扩展属性在功能上(保留数据)都具有一点相同的功能,但是自定义属性和扩展属性的功能之间存在相当大的差异。例如
我们可以通过将其与任何其他数据库表连接来添加带有扩展属性的额外搜索条件。我们可以通过在其中添加ACL对其进行身份验证。让我们详细解释一下。
请查看以下代码段。您必须创建一个/etc/extension_attributes.xml
<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>
搜索扩展属性: 在连接标记中,您可以定义要与之关联的相关表,并从该表中获取数据。在 reference_table属性中,您必须提供表名称,而reference_field将是放置关系/联接的主键(此扩展属性在此示例产品中为其创建的第一个表键)。 顾名思义,join_on_field将是我们要记录的第二张表PK。在字段标签下,您可以添加您实际上想要获取数据的所有必填字段
扩展属性认证: 您可以通过使用标签来限制此特定扩展属性值。假设我们为产品提供了一个以上的扩展属性,其中一个说extra_special_price,我们不想向所有用户展示。我们可以限制此属性。看看以下片段。
<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>
在此示例中,stock_item属性仅限于具有Magento_CatalogInventory :: cataloginventory权限的用户,而logo_size没有任何条件。
因此,现在,如果您获得产品对象(通过api或通过网络以任何方式),如果当前用户拥有cataloginventory的权限,那么他将仅获得stock_items值。
超出此问题的范围,但请看一下如何在以下链接中以非常简单的方式使用custom_extension创建属性: 如何创建extension_attributes