Estou construindo um módulo CRUD para Magento 2 usando componentes da interface do usuário para a lista e o formulário de administração e uma das minhas entidades possui um campo de imagem.
Mas não posso fazê-lo funcionar como deveria.
Aqui está como deve funcionar.
Quando no modo de adição ou no modo de edição, sem imagem carregada, deve parecer uma simples entrada de arquivo.
Quando um arquivo é carregado, ele deve mostrar a visualização da imagem e uma caixa de exclusão abaixo.
Não estou procurando exatamente esse design. Pode parecer diferente, mas tem a mesma funcionalidade.
No Magento 1 eu pude fazer isso, apenas criando meu próprio renderizador de bloco
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;
}
}
E adicionando isso no meu bloco de formulário
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Mas não tenho nenhum bloco de formulário no Magento 2.
Sei que posso usar um nome de classe para um campo de formulário no arquivo de componentes da interface do usuário
<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>
Obviamente eu tenho que criar essa classe, mas o que devo estender?
Tudo o que sei é que preciso implementar a interface, Magento\Framework\View\Element\UiComponentInterface
mas não encontrei nada que pudesse estender.
Portanto, minha verdadeira pergunta é: Posso estender algumas aulas para alcançar o comportamento desejado? Caso contrário, como posso começar a criar esse elemento renderizador?