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?

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
  • Could you please tell me the complete steps to do it? – Ayaz Mar 23 '18 at 6:22
  • You have to create custom module with installData file. Which I have mention. – zed Blackbeard Mar 23 '18 at 6:23
  • I have already created. – Ayaz Mar 23 '18 at 6:24
  • @Ayaz : Can you add your code here ? – zed Blackbeard Mar 23 '18 at 6:29
  • Yes sir, I have. – Ayaz Mar 23 '18 at 6:35

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.