magento2添加客户属性

时间:2019-03-04 08:44:09

标签: magento2

使用Magento 2.3.0 每当尝试保存客户时,我都会收到错误消息,即使我设置了它们的值,也需要新创建的属性。

etc / extend_attributes.xml     

<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

<?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();
    }
}

我已经阅读了很多有关此内容的教程和文档,并且我相信它应该可以正常工作,我是否缺少某些东西? 每当我尝试添加新客户或更新现有客户时,都说这2个属性是必需值,保存失败。

看起来也与此帖子相同: mage2gen.com/snippets/customerattribute

2 个答案:

答案 0 :(得分:0)

我最近有类似的问题,请尝试将其添加到“ used_in_forms”中。

您可能必须删除该属性并重新安装它:

'used_in_forms' => ['adminhtml_customer', 'customer_account_edit', 'customer_account_create']

修改

哦,我认为这应该可以解决问题,只需检查我的installData和upgradeData脚本,它们都具有 system => 0 。只需添加即可。

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

这与这个问题有关

https://apiworks.net/magento2/magento-2-is-not-saving-the-customer-attribute/

  

函数getCustomAttributesMetadata遍历所有EAV   属性,并检查该属性是否标记为“ is_system”   在“ customer_eav_attribute”表中,我的情况就是这样   自定义属性。

     

解决方案:

     

默认情况下,Magento将我的自定义属性标记为is_system = 1,因此我   只需在升级脚本中添加“ system” => false并执行   再次(在我直接从   数据库。 )。

答案 1 :(得分:-1)

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

如果将自定义属性设置为必需属性,则必须将其配置为在店面显示并在所有表单中显示。

如果您希望仅在某些特定形式上需要自定义属性,则应使用扩展属性,而不是'required'=> false。

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

您只需要替换

'required'=>是,

使用

'required'=>否,

有关更多详细信息,请参阅链接: Click here