Magento – Magento 2 Uncaught ReferenceError: Base64 is not defined

adminhtmlcustomer-attributemagento2

I am making customer file attribute,first time i am getting that error –

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/xxx/xxx/vendor/magento/framework/File/Uploader.php on line 552

After solve this then i am getting that error in console –

Uncaught ReferenceError: Base64 is not defined

i am using this code –

use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
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;


class UpgradeData implements UpgradeDataInterface {

    protected $customerSetupFactory;
    private $attributeSetFactory;

    public function __construct(
    CustomerSetupFactory $customerSetupFactory, AttributeSetFactory $attributeSetFactory
    ) {
        $this->customerSetupFactory = $customerSetupFactory;
        $this->attributeSetFactory = $attributeSetFactory;
    }


    public function upgrade( ModuleDataSetupInterface $setup, ModuleContextInterface $context ) {

        if (version_compare($context->getVersion(), '1.0.4') < 0) {

            $setup->startSetup();
            $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

            $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
            $attributeSetId = $customerEntity->getDefaultAttributeSetId();

            $attributeSet = $this->attributeSetFactory->create();
            $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

            $customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, 'twilio_image', [
                'type' => 'text',
                'label' => 'Twilio Image',
                'input' => 'file',
                "source" => '',
                'required' => false,
                'default' => '0',
                'visible' => true,
                'user_defined' => true,
                'sort_order' => 210,
                'position' => 210,
                'system' => false,
            ]);

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

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

/vendor/magento/module-theme/view/adminhtml/ui_component/design_config_form.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">design_config_form.design_config_form_data_source</item>
        </item>
        <item name="label" xsi:type="string" translate="true">Theme Information</item>
        <item name="template" xsi:type="string">templates/form/collapsible</item>
    </argument>
    <settings>
        <buttons>
            <button name="save_and_continue" class="Magento\Theme\Block\Adminhtml\Design\Config\Edit\SaveAndContinueButton"/>
            <button name="save" class="Magento\Theme\Block\Adminhtml\Design\Config\Edit\SaveButton"/>
            <button name="back" class="Magento\Theme\Block\Adminhtml\Design\Config\Edit\BackButton"/>
        </buttons>
        <namespace>design_config_form</namespace>
        <dataScope>data</dataScope>
        <deps>
            <dep>design_config_form.design_config_form_data_source</dep>
        </deps>
    </settings>
    <dataSource name="design_config_form_data_source">
        <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
            </item>
        </argument>
        <settings>
            <submitUrl path="theme/design_config/save"/>
        </settings>
        <dataProvider class="Magento\Theme\Model\Design\Config\DataProvider" name="design_config_form_data_source">
            <settings>
                <clientConfig>
                    <param name="validateBeforeSave" xsi:type="boolean">false</param>
                </clientConfig>
                <requestFieldName>scope</requestFieldName>
                <primaryFieldName>scope</primaryFieldName>
            </settings>
        </dataProvider>
    </dataSource>
    <fieldset name="other_settings" sortOrder="30">
        <settings>
            <label translate="true">Other Settings</label>
        </settings>
        <fieldset name="head">
            <settings>
                <level>1</level>
                <collapsible>true</collapsible>
                <label translate="true">HTML Head</label>
            </settings>
            <field name="head_shortcut_icon" formElement="imageUploader">
                <settings>
                    <notice translate="true">Not all browsers support all these formats!</notice>
                    <label translate="true">Favicon Icon</label>
                    <componentType>imageUploader</componentType>
                </settings>
                <formElements>
                    <imageUploader>
                        <settings>
                            <allowedExtensions>jpg jpeg gif png ico apng</allowedExtensions>
                            <maxFileSize>2097152</maxFileSize>
                            <uploaderConfig>
                                <param xsi:type="string" name="url">theme/design_config_fileUploader/save</param>
                            </uploaderConfig>
                        </settings>
                    </imageUploader>
                </formElements>
            </field>
            <field name="head_default_title" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Default Page Title</label>
                    <dataScope>head_default_title</dataScope>
                </settings>
            </field>
            <field name="head_title_prefix" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Page Title Prefix</label>
                    <dataScope>head_title_prefix</dataScope>
                </settings>
            </field>
            <field name="head_title_suffix" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Page Title Suffix</label>
                    <dataScope>head_title_suffix</dataScope>
                </settings>
            </field>
            <field name="head_default_description" formElement="textarea">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Default Meta Description</label>
                    <dataScope>head_default_description</dataScope>
                </settings>
            </field>
            <field name="head_default_keywords" formElement="textarea">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Default Meta Keywords</label>
                    <dataScope>head_default_keywords</dataScope>
                </settings>
            </field>
            <field name="head_includes" formElement="textarea">
                <settings>
                    <notice translate="true">This will be included before head closing tag in page HTML.</notice>
                    <dataType>text</dataType>
                    <label translate="true">Scripts and Style Sheets</label>
                    <dataScope>head_includes</dataScope>
                </settings>
            </field>
            <field name="head_demonotice" formElement="select">
                <settings>
                    <dataType>text</dataType>
                    <label translate="true">Display Demo Store Notice</label>
                    <dataScope>head_demonotice</dataScope>
                </settings>
                <formElements>
                    <select>
                        <settings>
                            <options class="Magento\Config\Model\Config\Source\Yesno"/>
                        </settings>
                    </select>
                </formElements>
            </field>
        </fieldset>
        <fieldset name="header">
            <settings>
                <level>1</level>
                <collapsible>true</collapsible>
                <label translate="true">Header</label>
            </settings>
            <field name="header_logo_src" formElement="imageUploader">
                <settings>
                    <label translate="true">Logo Image</label>
                    <componentType>imageUploader</componentType>
                </settings>
                <formElements>
                    <imageUploader>
                        <settings>
                            <allowedExtensions>jpg jpeg gif png</allowedExtensions>
                            <maxFileSize>2097152</maxFileSize>
                            <uploaderConfig>
                                <param xsi:type="string" name="url">theme/design_config_fileUploader/save</param>
                            </uploaderConfig>
                        </settings>
                    </imageUploader>
                </formElements>
            </field>
            <field name="header_logo_width" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-digits" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>number</dataType>
                    <label translate="true">Logo Attribute Width</label>
                    <dataScope>header_logo_width</dataScope>
                </settings>
            </field>
            <field name="header_logo_height" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-digits" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>number</dataType>
                    <label translate="true">Logo Attribute Height</label>
                    <dataScope>header_logo_height</dataScope>
                </settings>
            </field>
            <field name="header_welcome" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Welcome Text</label>
                    <dataScope>header_welcome</dataScope>
                </settings>
            </field>
            <field name="header_logo_alt" formElement="input">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Logo Image Alt</label>
                    <dataScope>header_logo_alt</dataScope>
                </settings>
            </field>
        </fieldset>
        <fieldset name="footer">
            <settings>
                <level>1</level>
                <collapsible>true</collapsible>
                <label translate="true">Footer</label>
            </settings>
            <field name="footer_absolute_footer" formElement="textarea">
                <settings>
                    <notice translate="true">This will be displayed just before the body closing tag.</notice>
                    <dataType>text</dataType>
                    <label translate="true">Miscellaneous HTML</label>
                    <dataScope>footer_absolute_footer</dataScope>
                </settings>
            </field>
            <field name="footer_copyright" formElement="textarea">
                <settings>
                    <validation>
                        <rule name="validate-no-html-tags" xsi:type="boolean">true</rule>
                    </validation>
                    <dataType>text</dataType>
                    <label translate="true">Copyright</label>
                    <dataScope>footer_copyright</dataScope>
                </settings>
            </field>
        </fieldset>
        <fieldset name="search_engine_robots" sortOrder="120">
            <settings>
                <level>1</level>
                <collapsible>true</collapsible>
                <label>Search Engine Robots</label>
            </settings>
            <field name="default_robots" formElement="select">
                <settings>
                    <notice translate="true">This will be included before head closing tag in page HTML.</notice>
                    <dataType>text</dataType>
                    <label translate="true">Default Robots</label>
                    <dataScope>default_robots</dataScope>
                    <scopeLabel>[WEBSITE]</scopeLabel>
                </settings>
                <formElements>
                    <select>
                        <settings>
                            <options class="Magento\Config\Model\Config\Source\Design\Robots"/>
                        </settings>
                    </select>
                </formElements>
            </field>
            <field name="custom_instructions" formElement="textarea">
                <settings>
                    <dataType>text</dataType>
                    <label translate="true">Edit custom instruction of robots.txt File</label>
                    <dataScope>custom_instructions</dataScope>
                    <scopeLabel>[WEBSITE]</scopeLabel>
                </settings>
            </field>
            <field name="reset_to_defaults" class="Magento\Theme\Ui\Component\Design\Config\SearchRobots\ResetButton" component="Magento_Theme/js/form/component/robots-reset-button" template="Magento_Theme/form/button-field" formElement="button">
                <settings>
                    <notice translate="true">This action will delete your custom instructions and reset robots.txt file to system's default settings.</notice>
                    <dataScope>reset_to_defaults</dataScope>
                    <scopeLabel>[WEBSITE]</scopeLabel>
                </settings>
                <formElements>
                    <button>
                        <settings>
                            <title translate="true">Reset To Defaults</title>
                        </settings>
                    </button>
                </formElements>
            </field>
        </fieldset>
    </fieldset>
</form>

Best Answer

if you are using magento2.3 you have to just change

type="fileUploader"

to

type="imageUploader"

in your ui compoent grid

this error is not regarding attribute creation ,it's mistake in custom ui component grid

Related Topic