He creado un formulario en el administrador usando componentes de la interfaz de usuario, así que en mi view/adminhtml/ui_component/[module]_[entity]_form.xml
tengo lo siguiente:
<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>
Ahora no quiero que este valor sea un textarea
, pero quiero crear mi propia magia HTML en el back-end para este valor. Este 'HTML Magic' eventualmente será una gran cantidad de JS / KnockOut que bajo el agua aún envía algunos datos ocultos al publicar el formulario, por lo que debe ser parte del formulario. Intenté agregar un renderizado agregando:
<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>
Pero esto todavía representa el área de texto. Luego intenté reemplazarlo formElement
con una clase personalizada como esta:
<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>
Pero luego me sale el error:
The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.
Entonces 2 preguntas aquí:
- ¿Es esta la forma correcta de agregar un elemento de formulario personalizado a un formulario de administrador? (y si es así: ¿cómo?)
- Independientemente de cualquier cosa: ¿cómo puedo agregar la implementación? Estoy investigando el módulo UI para ver cómo lo hicieron, pero no puedo encontrar nada.
\Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()
agregar un componente personalizado usando un evento, ¡pero esto es mucho, mucho más conveniente! Realmente debería analizar más esos ejemplos de Magento 2.