Eu criei um formulário no administrador usando componentes da interface do usuário, então no meu view/adminhtml/ui_component/[module]_[entity]_form.xml
eu tenho o seguinte:
<field name="configuration">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Configuration</item>
<item name="formElement" xsi:type="string">textarea</item>
<item name="source" xsi:type="string">form</item>
<item name="sortOrder" xsi:type="number">30</item>
<item name="dataScope" xsi:type="string">configuration</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">true</item>
</item>
</item>
</argument>
</field>
Agora não quero que esse valor seja um textarea
, mas quero criar minha própria mágica HTML no back-end para esse valor. Esse 'HTML Magic' acabará sendo um monte de JS / KnockOut que, debaixo d'água, ainda envia alguns dados ocultos ao postar o formulário, portanto, ele precisa fazer parte do formulário. Tentei adicionar um renderizado adicionando:
<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>
Mas isso ainda renderiza a área de texto. Então tentei substituir o formElement
por uma classe personalizada da seguinte maneira:
<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>
Mas então eu recebo o erro:
The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.
Então, 2 perguntas aqui:
- É o caminho certo para adicionar um elemento de formulário personalizado a um formulário de administrador? (e se sim: como?)
- Independentemente de qualquer coisa: como posso adicionar a implementação? Estou pesquisando o módulo da interface do usuário para ver como eles fizeram isso, mas não consigo encontrar nada.
\Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()
adicionar um componente personalizado usando um evento, mas isso é muito, muito mais conveniente! Eu realmente deveria olhar mais para esses exemplos do Magento 2.