Magento 2: Dynamically add fields in Custom Admin Form using the UI component.

Add Dynamic Field In Custom Admin Form Using UI Component In Magento 2

In this Magento tutorial blog, I will illustrate Magento 2: Dynamically add fields in Custom Admin Form using the UI component.

Basically, we all know that in Magento 2 anyone can create a custom form on the admin side with the help of UI components as well as block files. Besides this in admin form, we can easily add multiple form elements such as label, drop-down, checkbox, etc. Therefore with this blog illustration, I will help you to learn how to create dynamic form elements in admin form using the UI components.

Let’s get started.

Steps to Add Dynamic Fields In Custom Admin Form Using UI Component:

Step 1: Firstly, add the below given code in your form file namely vendor_extension_data_form.xml in the app\code\Vendor\Extension\view\adminhtml\ui_component folder:

<fieldset name="dynamic_fieldset" class="Vendor\Extension\Ui\Component\Form\Fieldset">

    <argument name="data" xsi:type="array">

        <item name="config" xsi:type="array">

            <item name="label" xsi:type="string" translate="true">Dynamic Fields</item>

            <item name="sortOrder" xsi:type="number">1000</item>

        </item>

    </argument>

</fieldset>

Step 2: After the above step create Fieldset.php file in the app\code\Vendor\Extension\Ui\Component\Form folder and add the below given code:

<?php
namespace Vendor\Extension\Ui\Component\Form;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Ui\Component\Form\FieldFactory;
class Fieldset extends \Magento\Ui\Component\Form\Fieldset
{
    protected $fieldFactory;
    public function __construct(
        ContextInterface $context,
        array $components = [],
        array $data = [],
        FieldFactory $fieldFactory)
    {
        parent::__construct($context, $components, $data);
        $this->fieldFactory = $fieldFactory;
    }
    public function getChildComponents()
    {
        $options = [
            0 => [
                'label' => 'Option 1',
                'value' => 1
            ],
            1  => [
                'label' => 'Option 2',
                'value' => 2
            ],
            2 => [
                'label' => 'Option 3',
                'value' => 3
            ],
        ];
        $fields = [
            [
                'label' => __('Label'),
                'value' => __('Label Value'),
                'formElement' => 'input',
            ],
            [
                'label' => __('Checkbox'),
                'value' => __('0'),
                'formElement' => 'checkbox',
            ],
            [
                'label' => __('Dropdown'),
                'options' => $options,
                'formElement' => 'select',
            ],
        ];
        foreach ($fields as $key => $field) {
            $fieldInstance = $this->fieldFactory->create();
            $name = 'custom_field_' . $key;
            $fieldInstance->setData(
                [
                    'config' => $field,
                    'name' => $name
                ]
            );
            $fieldInstance->prepare();
            $this->addComponent($name, $fieldInstance);
        }
        return parent::getChildComponents();
    }
}

Step 3: Lastly, after following the above steps clear cache.

Hence Dynamic Fields will be added In Custom Admin Form Using UI Component as shown in the below screenshot.

Config_UI_Components

That’s It.

Wrap Up: 

Hopefully, all have implemented the above solution without any difficulties, and in case of any errors during the implementation then let me know in the comment section below. One can also utilize the hire Magento developer service for better optimization of your Magento 2 store.

Share the illustration with your Magento friends.

Happy Reading

Previous Article

How to Add Sticky Header Component in Magento 2

Next Article

7 Proven Steps to Speed up Your Magento 2 Store

Write a Comment
  1. Hi,

    I am writing to you about your blog.
    I tried to adding custom field on new shipment page so I followed your guite in this blog.
    But I got issue.
    main.ERROR: Deprecated Functionality: Optional parameter $components declared before required parameter $fieldFactory is implicitly treated as a required parameter in C:\xampp\htdocs\magento2\app\code\Compass\ShipmentAttachment\Ui\Component\Form\Fieldset.php on line 8 [] []

    I am using Magento 2.4.4.

    Could you please help me to add some fields on new shipment page?
    Looking forward to hearing from you.

    Best Regards,
    Rolan

  2. Error on admin page:
    Call to a member function getRequestFieldName() on null.
    It from:
    vendor/magento/module-ui/Component/Form.php::getDataSourceData()

Leave a Comment

Your email address will not be published. Required fields are marked *

Get Connect With Us

Subscribe to our email newsletter to get the latest posts delivered right to your email.
Pure inspiration, zero spam ✨