Using modifiers is optional and might be necessary when static declaration in XML configuration files is not suitable for the tasks.
Example: In cases We need additional data should be loaded from the database.
Implementation of custom PHP modifier
Use the following steps to implement a custom PHP modifier for a UI component;
Step 1:
In your custom module create a class that implements \Magento\Ui\DataProvider\Modifier\ModifierInterface
with the following methods:
<?php use Magento\Ui\DataProvider\Modifier\ModifierInterface; class Example implements ModifierInterface { public function modifyMeta(array $meta) { $meta['test_fieldset_name'] = [ 'arguments' => [ 'data' => [ 'config' => [ 'label' => __('Test Label For Fieldset'), 'sortOrder' => 50, 'collapsible' => true ] ] ], 'children' => [ 'test_field_name' => [ 'arguments' => [ 'data' => [ 'config' => [ 'formElement' => 'select', 'componentType' => 'field', 'options' => [ ['value' => 'test_value', 'label' => 'Test Value'], ], 'visible' => 1, 'required' => 1, 'label' => __('Label For Element') ] ] ] ] ] ]; return $meta; } /** * {@inheritdoc} */ public function modifyData(array $data) { return $data; } }Step 2:
Declare modifier in <Your_Module_dir>/etc/adminhtml/di.xml
. This declaration looks like the following:
<virtualType name="%Webkul\Test\DataProvider\Modifier\Pool%" type="Magento\Ui\DataProvider\Modifier\Pool"> <arguments> <argument name="modifiers" xsi:type="array"> <item name="modifier_name" xsi:type="array"> <item name="class" xsi:type="string">%Webkul\Test\Modifier\Example%</item> <item name="sortOrder" xsi:type="number">10</item> </item> </argument> </arguments> </virtualType>
Webkul\Test\DataProvider\Modifier\Pool
is a virtual class.
Step 3:
To use your modifier, add a dependency on your UI component data provider.
<type name="%Webkul\Test\Ui\DataProvider\Example%"> <arguments> <argument name="pool" xsi:type="object">%Webkul\Test\DataProvider\Modifier\Pool%</argument> </arguments> </type>
Be the first to comment.