Я создал форму в админке, используя компоненты пользовательского интерфейса, поэтому у меня 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>
Теперь я не хочу, чтобы это значение было textarea
, но я хочу создать свою собственную магию HTML в бэкэнде для этого значения. Эта «HTML-магия» в конечном итоге станет большим количеством 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.