Я створив форму в адміністраторі за допомогою компонентів інтерфейсу, тож у view/adminhtml/ui_component/[module]_[entity]_form.xml
мене є таке:
<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>
Тепер я не хочу, щоб це значення було a textarea
, але я хочу створити свою власну магію HTML в бекенде для цього значення. Цей 'HTML Magic' з часом буде багато JS / KnockOut, який під водою все ж надсилає деякі приховані дані під час публікації форми, тому він повинен бути частиною форми. Я спробував додати візуалізацію, додавши:
<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>
Але це все ще робить текстові області. Потім я спробував замінити formElement
спеціальний клас таким чином:
<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>
Але тоді я отримую помилку:
The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.
Тож 2 питання тут:
- Це правильний спосіб додати спеціальний елемент форми до форми адміністратора? (і якщо так: як?)
- Незалежно від чого: як я можу додати реалізацію? Я перекопую UI-модуль, щоб побачити, як вони це зробили, але нічого не можу знайти.
\Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()
щоб додати спеціальний компонент за допомогою події, але це набагато, набагато зручніше! Мені справді слід детальніше розглянути ті приклади Magento 2.