Ho creato un modulo nell'amministratore utilizzando i componenti dell'interfaccia utente, quindi nel mio view/adminhtml/ui_component/[module]_[entity]_form.xml
ho il seguente:
<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>
Ora non voglio che questo valore sia un textarea
, ma voglio creare la mia magia HTML nel backend per questo valore. Questo 'HTML Magic' alla fine sarà un sacco di JS / KnockOut che sott'acqua invia ancora alcuni dati nascosti quando si pubblica il modulo, quindi deve essere parte del modulo. Ho provato ad aggiungere un rendering aggiungendo:
<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>
Ma questo rende ancora l'area di testo. Quindi ho provato a sostituire il formElement
con una classe personalizzata in questo modo:
<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>
Ma poi ricevo l'errore:
The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.
Quindi 2 domande qui:
- È questo il modo giusto per aggiungere un elemento di modulo personalizzato a un modulo di amministrazione? (e in tal caso: come?)
- Indipendentemente da nulla: come posso aggiungere l'implementazione? Sto scavando attraverso il modulo UI per vedere come hanno fatto, ma non riesco a trovare nulla.
\Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()
di aggiungere un componente personalizzato utilizzando un evento, ma questo è molto, molto più conveniente! Dovrei davvero guardare di più in quegli esempi di Magento 2.