J'ai créé un formulaire dans l'administrateur en utilisant des composants d'interface utilisateur, donc dans mon view/adminhtml/ui_component/[module]_[entity]_form.xml
j'ai les éléments suivants:
<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>
Maintenant, je ne veux pas que cette valeur soit un textarea
, mais je veux créer ma propre magie HTML dans le backend pour cette valeur. Ce «HTML Magic» sera finalement beaucoup de JS / KnockOut qui sous l'eau envoie toujours des données cachées lors de la publication du formulaire, il doit donc faire partie du formulaire. J'ai essayé d'ajouter un rendu en ajoutant:
<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>
Mais cela rend toujours la zone de texte. Ensuite, j'ai essayé de remplacer le formElement
par une classe personnalisée comme ceci:
<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>
Mais alors je reçois l'erreur:
The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.
Donc 2 questions ici:
- Est-ce la bonne façon d'ajouter un élément de formulaire personnalisé à un formulaire d'administration? (et si oui: comment?)
- Indépendamment de quoi que ce soit: comment ajouter l'implémentation? Je fouille dans le module d'interface utilisateur pour voir comment ils l'ont fait, mais je ne trouve rien.
\Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()
à ajouter un composant personnalisé en utilisant un événement, mais c'est beaucoup, beaucoup plus pratique! Je devrais vraiment approfondir ces exemples de Magento 2.