Magento2 CE不能使用模型自定义扩展属性。

问题描述 投票:1回答:1

我正在努力学习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;
    }

}
php magento magento2 magento-2.3
1个回答
0
投票

首先,我将尝试通过以下方式设置扩展属性。setData() 法,比如。

$extensionAttributes->setData('sample', 'Code #' . $entity->getId());

并去掉第一个反斜杠 \SimplifiedMagento 在你的*.xml文件中,你声明了你的类和接口的命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.