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。现在我至少有一个大概的想法。如果没有人击败我,我将在某一时间写一个完整的过程的描述,因为我认为这将是一个有用的参考。