I'm trying to add another field to the customer create form.

The following code troughs an error in the backend. The error is:

Class Magento\Customer\Model\Metadata\Form\String does not exist

or if I refresh the page it will change to:

The requested component ("string") is not found. Before using, you must add the implementation.

and back to the original error if i refresh again.


namespace tivol\registrationExtra\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;
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
        $entityTypeId = $customerSetup->getEntityTypeId(\Magento\Customer\Model\Customer::ENTITY);

        $customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, "salesAssociate", [
            "type" => "varchar",
            "backend" => "",
            "label" => "Sales associate",
            "input" => "string",
            "source" => 'Magento\Eav\Model\Entity\Attribute\Source\AbstractSource',
            "visible" => true,
            "required" => false,
            "default" => "",
            "frontend" => "",
            "unique" => false,
            "note" => "",


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

        $salesAssociate = $customerSetup->getEavConfig()->getAttribute(\Magento\Customer\Model\Customer::ENTITY, 'salesAssociate');
        $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";
        $salesAssociate->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", 100);



<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
        <referenceContainer name="form.additional.info">
            <block class="Magento\Framework\View\Element\Template" name="sales_associate" template="MyModules_CustomerMarketingFields::salesassociate.phtml"/>


<legend class="legend"><span><?php /* @escapeNotVerified */
        echo __('If you shop in-store who is your regular sales associate') ?></span>

<div class="field">
    <label for="associate" class="label"><span><?php /* @escapeNotVerified */
            echo __('Associate') ?></span></label>
    <div class="control">
        <select name="regulation" id="associate" title="<?php /* @escapeNotVerified */
        echo __('Associate') ?>">
            <option value="Option 1">Option 1</option>
            <option value="Option 2">Option 2</option>
            <option value="Option 3">Option 3</option>




<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="tivol_registrationExtra" setup_version="0.0.1"/>

Any ideas as to what I have done wrong?

1 Answer 1


Try to change this line:

"input"    => "string",

to the:

"input"    => "text",

because a component with name 'string' not exist.

Then reinstall your module.

Note: if on uninstall process your module does not delete the attribute salesAssociate programmatically you should do-it-yourself. Useful link - Magento 2 How to uninstall attributes added by custom module?


You can change input type right in the eav_attribute table, just find your attribute by the attribute_code (it should be salesAssociate) and set its frontend_input value as text. I didn't check this solution, but it should help.


You can just update your install class and reinstall the module. Add the line:

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

Before the:

$customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, "salesAssociate", [ ....

Remove the record about your module from the setup_module table and execute command bin/magento setup:upgrade in the magento root folder.

  • I followed the link but am unsure of where to put that file and what to call it?
    – Mark
    Aug 25, 2016 at 12:29
  • @Mark I was glad to help. I have updated the answer just in case Aug 25, 2016 at 12:43
  • now i just need to work out why it shows in the backend and not the front lol
    – Mark
    Aug 25, 2016 at 14:00
  • So I can see it all now but it didn't save to the database for the customer any ideas?
    – Mark
    Aug 25, 2016 at 14:35
  • @Mark Try to change the <select name="regulation" to the <select name="salesAssociate" because the name of your attribute is salesAssociate Aug 25, 2016 at 14:40

Your Answer

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

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