0

I want to add an extra field on the customer registration form and its value must be saved in database after its subimission. How can I do that?

3

1 Answer 1

1

You need to create a module and here is installData.php

namespace Custom\Module\Setup;

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

class InstallData implements InstallDataInterface
{
    /**
     * Customer setup factory
     *
     * @var \Magento\Customer\Setup\CustomerSetupFactory
     */
    private $customerSetupFactory;
    /**
     * Init
     *
     * @param \Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory
     */
    public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
    {
        $this->customerSetupFactory = $customerSetupFactory;
    }
    /**
     * Installs DB schema for a module
     *
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        $installer = $setup;
        $installer->startSetup();

        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
        $entityTypeId = $customerSetup->getEntityTypeId(\Magento\Customer\Model\Customer::ENTITY);

        $customerSetup->removeAttribute(\Magento\Customer\Model\Customer::ENTITY, "custom_field");

        $customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, "custom_field",  array(
            "type"     => "varchar",
            "backend"  => "",
            "label"    => "Custom Field",
            "input"    => "text",
            "source"   => "",
            "visible"  => true,
            "required" => false,
            "default" => "",
            "frontend" => "",
            "unique"     => false,
            "note"       => ""

        ));

        $custom_field   = $customerSetup->getAttribute(\Magento\Customer\Model\Customer::ENTITY, "custom_field");

        $custom_field = $customerSetup->getEavConfig()->getAttribute(\Magento\Customer\Model\Customer::ENTITY, 'custom_field');

      $used_in_forms[]="adminhtml_customer";
        $used_in_forms[]="checkout_register";
        $used_in_forms[]="customer_account_create";
        $used_in_forms[]="customer_account_edit";
        $used_in_forms[]="adminhtml_checkout";

        $custom_field->setData("used_in_forms", $used_in_forms)
            ->setData("is_used_for_customer_segment", true)
            ->setData("is_system", 0)
            ->setData("is_user_defined", 1)
            ->setData("is_visible", 1)
            ->setData("sort_order", 1002);

        $custom_field->save();

        $installer->endSetup();
    }
}

Note : If you apply this script in existing module than, First you need to remove your module from Setup table from DB than run below commands to make it work.

setup:upgrade
setup:static-content:deploy
cache:clean
9
  • Could you please tell me the complete steps to do it?
    – Ayaz
    Mar 23, 2018 at 6:22
  • You have to create custom module with installData file. Which I have mention. Mar 23, 2018 at 6:23
  • I have already created.
    – Ayaz
    Mar 23, 2018 at 6:24
  • @Ayaz : Can you add your code here ? Mar 23, 2018 at 6:29
  • Yes sir, I have.
    – Ayaz
    Mar 23, 2018 at 6:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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