Я создаю модуль CRUD для Magento 2, используя компоненты пользовательского интерфейса для списка и формы администратора, и одна из моих сущностей имеет поле изображения.
Но я не могу заставить его работать как следует.
Вот как это должно работать.
В режиме добавления или в режиме редактирования без загруженного изображения это должно выглядеть как простой ввод файла.
Когда файл загружен, он должен показать предварительный просмотр изображения и поле для удаления под ним.
Я не ищу именно этот дизайн. Это может выглядеть по-другому, но иметь одинаковую функциональность.
В Magento 1 я смог сделать это, просто создав собственный блок рендеринга.
class {{Namespace}}_{{Module}}_Block_Adminhtml_{{Entity}}_Helper_Image extends Varien_Data_Form_Element_Image
{
protected function _getUrl()
{
$url = false;
if ($this->getValue()) {
$url = Mage::helper('{{namespace}}_{{module}}/{{entity}}_image')->getImageBaseUrl().$this->getValue();
}
return $url;
}
}
И добавив это в моей форме блока
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Но у меня нет блока формы в Magento 2.
Я знаю, что могу использовать имя класса для поля формы в файле компонентов пользовательского интерфейса
<field name="image" class="Class\Name\Here">
<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">Resume</item>
<item name="formElement" xsi:type="string">image</item>
<item name="source" xsi:type="string">[entity]</item>
<item name="dataScope" xsi:type="string">image</item>
</item>
</argument>
</field>
Очевидно, я должен создать этот класс, но что я должен расширить?
Все, что я знаю, это то, что мне нужно реализовать интерфейс, Magento\Framework\View\Element\UiComponentInterface
но я не нашел ничего, что мог бы расширить.
Итак, мой реальный вопрос: могу ли я расширить какой-то класс для достижения желаемого поведения? Если нет, как я могу начать создавать этот элемент рендерера?