Magento 2: Bagaimana cara membuat atribut khusus pelanggan?


Jawaban:


28

Dalam artikel Magento 2: Bagaimana cara membuat atribut pelanggan? jelaskan langkah demi langkah.

Bagian utama adalah DataInstall::installmetode di bawah ini:

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
        $attributeSetId = $customerEntity->getDefaultAttributeSetId();

        /** @var $attributeSet AttributeSet */
        $attributeSet = $this->attributeSetFactory->create();
        $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        $customerSetup->addAttribute(Customer::ENTITY, '{attributeCode}', [
            'type' => 'varchar',
            'label' => '{attributeLabel}',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => true,
            'sort_order' => 1000,
            'position' => 1000,
            'system' => 0,
        ]);
        //add attribute to attribute set
        $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'magento_username')
        ->addData([
            'attribute_set_id' => $attributeSetId,
            'attribute_group_id' => $attributeGroupId,
            'used_in_forms' => ['adminhtml_customer'],
        ]);

        $attribute->save();


    }

Apa manfaat menyuntik CustomerSetupFactorydaripada langsung menyuntikkan CustomerSetup? Terima kasih telah menjelaskan.
Vinai

@Vinai, Tampak terlihat kelas customerSetup mengharapkan ModuleDataSetupInterface dalam konstruktor tetapi kelas ini adalah argumen metode instal.
KAndy

Karena ModuleDataSetupInterfacetidak memiliki status khusus untuk kelas penyetelan, bukankah lebih baik membiarkan ObjectManager bertanggung jawab untuk membuat dependensi instance? Dengan begitu CustomerSetupklien akan kurang digabungkan dengan implementasi. Sejauh yang saya bisa lihat.
Vinai

Menghapus modul tidak menghapus atribut, lalu bagaimana cara menghapusnya?
DevonDahon

Bagaimana kita bisa menambahkan lebih dari satu fied atau atribut?
Jai

1

Dalam modul Anda, implementasikan file ini di bawah ini yang akan membuat entitas Pelanggan baru .

Uji \ CustomAttribute \ Setup \ InstallData.php

<?php
namespace test\CustomAttribute\Setup;

use Magento\Customer\Setup\CustomerSetupFactory;
use Magento\Customer\Model\Customer;
use Magento\Eav\Model\Entity\Attribute\Set as AttributeSet;
use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface
{

    /**
     * @var CustomerSetupFactory
     */
    protected $customerSetupFactory;

    /**
     * @var AttributeSetFactory
     */
    private $attributeSetFactory;

    /**
     * @param CustomerSetupFactory $customerSetupFactory
     * @param AttributeSetFactory $attributeSetFactory
     */
    public function __construct(
        CustomerSetupFactory $customerSetupFactory,
        AttributeSetFactory $attributeSetFactory
    ) {
        $this->customerSetupFactory = $customerSetupFactory;
        $this->attributeSetFactory = $attributeSetFactory;
    }


    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
        $attributeSetId = $customerEntity->getDefaultAttributeSetId();

        /** @var $attributeSet AttributeSet */
        $attributeSet = $this->attributeSetFactory->create();
        $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        $customerSetup->addAttribute(Customer::ENTITY, 'custom_attribute', [
            'type' => 'varchar',
            'label' => 'Custom Attribute',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => true,
            'position' =>999,
            'system' => 0,
        ]);

        $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'custom_attribute')
        ->addData([
            'attribute_set_id' => $attributeSetId,
            'attribute_group_id' => $attributeGroupId,
            'used_in_forms' => ['adminhtml_customer'],//you can use other forms also ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address']
        ]);

        $attribute->save();
    }
}

tidak bekerja ....
Sarfaraj Sipai

Ini bekerja untuk saya di Magneto 2.3 ibnab.com/en/blog/magento-2/…
Raivis Dejus

@Rafael Corrêa Gomes apakah mungkin membuat beberapa atribut menggunakan metode ini? Bagaimana?
Pragman

@ZUBU Anda hanya perlu menambahkan $ customerSetup-> addAttribute baru berikutnya yang pertama, Anda dapat mencari -> addAttribute ke dalam inti juga untuk melihat referensi.
Rafael Corrêa Gomes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.