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.
fuente
\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.No estoy seguro, pero creo que
shopping cart price rule
le daré una pista sobre esto, aquí está el ejemploPara más detalles puedes visitar este archivo
\vendor\magento\module-sales-rule\view\adminhtml\ui_component\sales_rule_form.xml
fuente