首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >magento2添加客户属性

magento2添加客户属性
EN

Stack Overflow用户
提问于 2019-03-04 16:44:09
回答 1查看 1.6K关注 0票数 1

使用Magento 2.3.0时,每当我试图保存客户时,我都会得到错误,新创建的属性是必需的,即使我设置了它们的值。

etc/extend_attributes.xml

代码语言:javascript
复制
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Customer\Api\Data\CustomerInterface">
        <attribute code="customershipping_enabled" type="string" />
        <attribute code="customershipping_price" type="string" />
    </extension_attributes>
</config>

Setup/InstallData.php

代码语言:javascript
复制
<?php
namespace <vendor>\<module_name>\Setup;

use Magento\Eav\Model\Entity\Attribute\Source\Boolean;

use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface {
    private $customerSetupFactory;

    public function __construct(
        \Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory
    ) {
        $this->customerSetupFactory = $customerSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context) {
        $customerSetup =$this->customerSetupFactory->create(['setup'=>$setup]);

        $setup->startSetup();

        $customerSetup->addAttribute('customer', 'customershipping_enabled', [
            'label'=>'Customer Shipping Enabled',
            'type' => 'int',
            'input' => 'select',
            'source' => Boolean::class,
            'required'=>true,
            'visible'=>true,
            'default' => 0,
            'position' => 198,
        ]);

        $customerSetup->addAttribute('customer', 'customershipping_price', [
            'label'=>'Customer Shipping Price',
            'type'=>'decimal',
            'input' => 'text',
            'required'=>true,
            'visible'=>true,
            'default' => 0,
            'position' => 199,
        ]);

        $enabledAttribute = $customerSetup->getEavConfig()->getAttribute('customer', 'customershipping_enabled');
        $enabledAttribute->setData('used_in_forms', ['adminhtml_customer']);
        $enabledAttribute->save();

        $priceAttribute = $customerSetup->getEavConfig()->getAttribute('customer', 'customershipping_price');
        $priceAttribute->setData('used_in_forms', ['adminhtml_customer']);
        $priceAttribute->save();

        $setup->endSetup();
    }
}

我已经阅读了很多关于这方面的教程和文档,我相信这应该可以正常工作,我是不是遗漏了什么?每当我尝试添加新客户或更新现有客户时,系统都会显示这两个属性是必需值,保存失败。

看起来也和这篇文章一样:mage2gen.com/snippets/customerattribute

EN

回答 1

Stack Overflow用户

发布于 2019-03-05 14:04:42

这个问题的根本原因是magento 2的设计行为。

如果将自定义属性设置为必需属性,则必须将其配置为在storefront上显示以及在所有表单中显示。

如果您希望自定义属性仅在某些特定的表单上是必需的,那么应该使用扩展属性,并使用' required '=>false。

扩展属性用于扩展自定义属性的功能。

你只需要替换掉

'required'=>true,

使用

'required'=>false,

欲了解更多详情,请访问以下链接:Click here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54979528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档