Questions tagged «extension-attributes»

2
Magento2如何生成特定的ExtensionFactory和ExtensionAttributeInterface?
我想使用扩展属性来解决问题,例如引用项目。 使用像Magento 1这样的设置类向这样的实体添加自定义属性没有问题,这不是这个问题。 现在,当我想公开由扩展程序通过实体API添加的属性作为扩展属性时,魔术使我不知所措。 更新:我知道常规工厂是如何生成的。这个问题是关于特殊工厂的,这些工厂为生成的扩展属性接口实例化生成的实现。 这是我要使其正常工作所采取的步骤。我要添加这些内容,因此无论是谁尝试回答,都无需赘述。 我的问题是如何或为何它的工作原理。 通过实体API公开扩展属性的步骤: 创建一个etc/extension_attributes.xml将属性添加到实体接口的 创建一个插件以将属性值添加到实体ExtensionAttributes实例。 为了做第二点,ExtensionAttributes需要实体实例。因此,插件依赖于工厂,对象管理器通过DI提供该工厂。 对于报价项目Magento\Quote\Api\Data\CartItemExtensionFactory,必须使用示例。 我猜想工厂的类型一定是引发魔力的触发器。 然后,Magento \Magento\Quote\Api\Data\CartItemExtensionInterface用所有扩展属性的设置器和获取器生成匹配接口。 但是,它似乎并未为该接口生成具体的实现。至少,PHPStorm没有看到它。 Magento如何收集生成类所需的信息?如何在具体实例上调用生成的接口方法?它是仅在内存中生成的类吗? 我很高兴它能奏效,但这并不能令人满意。Magentos使用扩展自动创建的属性的能力是其成功的关键因素。作为模块开发人员,我相信我需要对整个过程有透彻的了解。 如果我有时间,我自己会自己研究一下,但是我希望能得到一个解释。 更新2:花一点时间阅读\Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator和阅读\Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator。现在我至少有一个大概的想法。如果没有人击败我,我将在某一时间写一个完整的过程的描述,因为我认为这将是一个有用的参考。

3
更改签出步骤时,属性在类Magento \ Quote \ Api \ Data \ AddressInterface中没有相应的setter
1-我将eav属性添加到customer_address $attributesInfo = [ 'reference' => [ 'label' => 'Reference', 'type' => 'varchar', 'input' => 'text', 'position' => 100, 'visible' => true, 'required' => false, ], ]; foreach ($attributesInfo as $attributeCode => $attributeParams) { $customerSetup->addAttribute('customer_address', $attributeCode, $attributeParams); } 2-我在模块中添加了extension属性 <extension_attributes for="Magento\Quote\Api\Data\AddressInterface"> <attribute code="reference" type="string"/> </extension_attributes> 在我的requirejs-config.js中,我覆盖了一些JavaScript文件以添加参考字段 var config = { …



3
实现getExtensionAttributes()的正确方法
我想知道,实现可扩展EAV模型的正确方法是什么。 我在中看到Magento\Catalog\Model\Product该方法getExtensionAttributes()是这样实现的: public function getExtensionAttributes() { $extensionAttributes = $this->_getExtensionAttributes(); if (!$extensionAttributes) { return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface'); } return $extensionAttributes; } 但是在其他情况下,例如客户或类别模型 public function getExtensionAttributes() { return $this->_getExtensionAttributes(); } 如果以前未设置extension_attributes键,则可能导致结果为NULL。 务实的是,我希望第一个。这样Magento\Framework\Api\ExtensionAttributesInterface,即使模型刚刚实例化,我也始终可以确保获得的实例。 但是,为什么在其他模块中不使用它呢?是否与我们在客户模块中看到的新的数据模型分离背道而驰?如果是这样,我们应该如何初始化扩展属性?


1
通过插件无法在magento 2中保存自定义付款字段数据,
我正在尝试通过插件保存我的自定义字段数据,但是它不起作用。 插件类 namespace Vendor\Module\Model\Checkout; class PaymentInformationManagementPlugin { protected $paymentMethodManagement; public function __construct( \Magento\Quote\Model\QuoteFactory $quote, \Magento\Quote\Api\PaymentMethodManagementInterface $paymentMethodManagement ) { $this->paymentMethodManagement = $paymentMethodManagement; $this->quoteManagement = $quoteManagement; } public function beforeSavePaymentInformation( \Magento\Checkout\Model\PaymentInformationManagement $subject, $cartId, \Magento\Quote\Api\Data\PaymentInterface $paymentInformation ) { //$paymentInformation->getData('extension_attributes'); $extenstinAttributes = $paymentInformation->getExtensionAttributes(); $taxCode = $extenstinAttributes->getTaxCode(); $paymentInformation->setExtensionAttributes($taxCode); $this->paymentMethodManagement->set($cartId, $paymentInformation); return true; // var_dump($taxCode);exit; // …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.