Ho creato un modulo nell'amministratore utilizzando i componenti dell'interfaccia utente, quindi nel mio view/adminhtml/ui_component/[module]_[entity]_form.xmlho 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 formElementcon 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.