Utworzyłem formularz w adminie przy użyciu składników interfejsu użytkownika, więc w mojej view/adminhtml/ui_component/[module]_[entity]_form.xml
mam następujące:
<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>
Teraz nie chcę, aby ta wartość była textarea
, ale chcę utworzyć własną magię HTML w backendie dla tej wartości. Ta „HTML Magic” ostatecznie będzie dużą ilością JS / KnockOut, która pod wodą wciąż wysyła ukryte dane podczas publikowania formularza, więc musi być częścią formularza. Próbowałem dodać renderowany, dodając:
<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>
Ale nadal renderuje obszar tekstowy. Potem spróbowałem zastąpić formElement
klasę niestandardową taką:
<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>
Ale wtedy pojawia się błąd:
The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.
Więc 2 pytania tutaj:
- Czy to właściwy sposób na dodanie niestandardowego elementu formularza do formularza administratora? (a jeśli tak: jak?)
- Niezależnie od wszystkiego: jak mogę dodać implementację? Przeglądam moduł interfejsu użytkownika, aby zobaczyć, jak to zrobili, ale nie mogę nic znaleźć.
\Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()
możliwości dodania niestandardowego komponentu za pomocą zdarzenia, ale jest to o wiele, wiele wygodniejsze! Naprawdę powinienem bardziej przyjrzeć się tym przykładom Magento 2.