5

I successfully add customer custom attribute for magento 2.2.5 like this:

$setup->startSetup();

$insertArray = array(
            'profile_picture' => array("type" => "varchar", "label" => "Profile Picture"),
            'security_question_1' => array("type" => "int", "label" => "Security Question 1"),
            'security_question_2' => array("type" => "int", "label" => "Security Question 2"),
            'security_answer_1' => array("type" => "varchar", "label" => "Security Answer 1"),
            'security_answer_2' => array("type" => "varchar", "label" => "Security Answer 2")
          );

          foreach ($insertArray as $key => $data) {
            $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, $key, [
                'type' => $data['type'],
                'label' => $data['label'],
                'input' => 'text',
                'required' => false,
                'visible' => true,
                'user_defined' => true,
                'sort_order' => 1000,
                'position' => 1000,
                'system' => 0,
            ]);

            $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, $key)
            ->addData([
                'attribute_set_id' => $attributeSetId,
                'attribute_group_id' => $attributeGroupId,
                'used_in_forms' => ['adminhtml_customer'],
            ]);

            $attribute->save();
          }
            $setup->endSetup();

I can retrieve and set the value programmatically, but the problem is when i edit customer in backend and go to account information tab, it doesn't load the input field for my custom attribute? if there is something missing, how can i update the customer custom attribute?

9

In contrast to Magento 1, in Magento 2 you now need to add some XML to make custom attributes appear in the edit customer section of the admin.

Create YourNamespace/YourModule/view/base/ui_component/customer_form.xml and add this (at a minimum):

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="customer">
        <field name="{{YOUR_ATTRIBUTE_CODE}}" formElement="input">
            <settings>
                <visible>true</visible>
            </settings>
        </field>
    </fieldset>
</form>

Replace {{YOUR_ATTRIBUTE_CODE}} with the attribute code from your upgrade script.

Run php -f bin/magento setup:upgrade and then you're good to go.

  • how to add select yes/no input field? – Tiny Dancer Jun 26 '18 at 3:54
  • That's really a new question. Ask that as a new question and I'll answer it. There's not enough room to explain here – ProcessEight Jun 26 '18 at 8:31
  • @ProcessEight thank you Sir! You saved my life! beer++ – Radu Sep 25 '18 at 15:55
  • @TinyDancer in my case I needed a multiselect so I've set it like this: formElement="multiselect" – Radu Sep 25 '18 at 15:56
0

ProcessEight answer is not working for us. The field now is visible if u set 'user_defined' to true, but it cannot be saved in backend as well. After reloading customer in backend the field is empty...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.