Estoy construyendo un módulo CRUD para Magento 2 usando componentes ui para la lista y el formulario de administración y una de mis entidades tiene un campo de imagen.
Pero no puedo hacer que funcione como debería.
Así es como debería funcionar.
Cuando está en modo agregar o en modo edición sin imagen cargada, debería verse como una simple entrada de archivo.
Cuando se carga un archivo, debe mostrar la vista previa de la imagen y un cuadro de eliminación debajo de él.
No estoy buscando exactamente este diseño. Podría verse de manera diferente pero tener la misma funcionalidad.
En Magento 1 pude hacer esto, simplemente creando mi propio renderizador de bloques
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;
}
}
Y agregando esto en mi bloque de formulario
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Pero no tengo bloque de formulario en Magento 2.
Sé que puedo usar un nombre de clase para un campo de formulario en el archivo de componentes de la interfaz de usuario
<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 tengo que crear esta clase, pero ¿qué debo extender?
Todo lo que sé es que necesito implementar la interfaz Magento\Framework\View\Element\UiComponentInterface
pero no encontré nada que pueda extender.
Entonces, mi verdadera pregunta es: ¿Puedo extender alguna clase para lograr el comportamiento deseado? Si no, ¿cómo puedo comenzar a crear este renderizador de elementos?