Magento 2: Làm thế nào để tạo một thuộc tính tùy chỉnh của khách hàng?


Câu trả lời:


28

Trong bài viết Magento 2: Làm thế nào để tạo thuộc tính khách hàng? mô tả nó từng bước một.

Phần chính là DataInstall::installphương pháp dưới đây:

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


    }

Lợi ích của việc tiêm CustomerSetupFactorythay vì tiêm trực tiếp là CustomerSetupgì? Cảm ơn vì đã giải thích.
Vinai

@Vinai, Trông có vẻ như lớp khách hàng Setup mong đợi ModuleDataSetupInterface trong hàm tạo nhưng lớp này là đối số của phương thức cài đặt.
KAndy

ModuleDataSetupInterfacekhông có trạng thái dành riêng cho lớp thiết lập, nên tốt hơn là để ObjectManager chịu trách nhiệm tạo các phụ thuộc thể hiện sau đó? Bằng cách đó, CustomerSetupkhách hàng sẽ ít đi đôi với việc thực hiện. Theo như tôi có thể thấy.
Vinai

Loại bỏ mô-đun không loại bỏ thuộc tính, sau đó nên loại bỏ nó như thế nào?
DevonDahon

Làm thế nào chúng ta có thể thêm nhiều hơn một fieds hoặc thuộc tính?
Jai

1

Trong mô-đun của bạn, triển khai tệp này bên dưới sẽ tạo ra một thực thể Khách hàng mới .

Kiểm tra \ CustomAttribution \ 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();
    }
}

không hoạt động ....
Sarfaraj Sipai

Điều này làm việc cho tôi trên Magneto 2.3 ibnab.com/en/blog/magento-2/ trên
Raivis Dejus

@Rafael Corrêa Gomes có thể tạo nhiều thuộc tính bằng phương thức này không? Làm sao?
Nhà thực dụng

@ZUBU bạn chỉ cần thêm $ khách hàng mới-> addAttribution bên cạnh cái đầu tiên, bạn có thể tìm kiếm -> addAttribution vào lõi cũng để xem tài liệu tham khảo.
Rafael Corrêa Gomes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.