我正在努力学习Magento 2(社区版v.2.3.4),但在处理扩展属性时似乎遇到了一堵墙。我根据文档做了一切 https:/devdocs.magento.comguidesv2.3extension-dev-guideextension_attributesadding-attributes.html。 和 https:/github.commagentomagento2-samplestreemastersample-external-links。 但由Magento编译器生成的代码(类名为 "AffiliateMemberExtension")没有添加我的自定义属性 "sample "的方法。
我从REST端点得到的确切错误信息是......。
Fatal Error: 'Uncaught Error: Call to undefined method SimplifiedMagento\\Database\\Api\\Data\\AffiliateMemberExtension::setSample() in \/home\/azumi\/work\/magento2\/app\/code\/SimplifiedMagento\/Attribute\/Model\/Plugin\/CodeAttributeExtension.php:37
我的完整源码在这里。https:/gitlab.comnaevus19my-magento-treemasterappcodeSimplifiedMagentoAttribute。
如果有任何帮助将非常感激。我不知道如何进一步调试:(
extension_attributes.xml
<?xml version="1.0"?>
<!--
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="\SimplifiedMagento\Database\Api\Data\AffiliateMemberInterface">
<attribute code="sample" type="string" />
</extension_attributes>
</config>
di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="\SimplifiedMagento\Database\Api\AffiliateMemberRepositoryInterface">
<plugin name="attribute_code_plugin" type="\SimplifiedMagento\Attribute\Model\Plugin\CodeAttributeExtension" />
</type>
</config>
模块.xml
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="SimplifiedMagento_Attribute" setup_version="0.1.0" />
</config>
插件代码 CodeAttributeExtension.php
<?php
/**
* Created by PhpStorm.
* User: kamil
* Date: 07.05.20
* Time: 16:39
*/
namespace SimplifiedMagento\Attribute\Model\Plugin;
use SimplifiedMagento\Database\Api\AffiliateMemberRepositoryInterface;
use \SimplifiedMagento\Database\Api\Data\AffiliateMemberExtensionFactory;
use SimplifiedMagento\Database\Api\Data\AffiliateMemberInterface;
use SimplifiedMagento\Database\Model\AffiliateMember;
use \SimplifiedMagento\Database\Model\AffiliateMemberRepository;
class CodeAttributeExtension
{
protected $extensionFactory;
public function __construct(AffiliateMemberExtensionFactory $extensionFactory)
{
$this->extensionFactory = $extensionFactory;
}
public function afterGetAffiliateMemberById
(
AffiliateMemberRepositoryInterface $subject,
AffiliateMember $entity
) {
$entity->setCustomAttribute('sample', "Code #" . $entity->getId());
$extensionAttributes = $entity->getExtensionAttributes();
if (empty($extensionAttributes)) {
$extensionAttributes = $this->extensionFactory->create();
}
$extensionAttributes->setSample("Code #" . $entity->getId());
$entity->setExtensionAttributes($extensionAttributes);
return $entity;
}
}
首先,我将尝试通过以下方式设置扩展属性。setData()
法,比如。
$extensionAttributes->setData('sample', 'Code #' . $entity->getId());
并去掉第一个反斜杠 \SimplifiedMagento
在你的*.xml文件中,你声明了你的类和接口的命名空间。