Je crée un module CRUD pour Magento 2 en utilisant des composants d'interface utilisateur pour la liste et le formulaire d'administration et l'une de mes entités a un champ d'image.
Mais je ne peux pas le faire fonctionner comme il se doit.
Voici comment cela devrait fonctionner.
En mode ajout ou en mode édition sans image téléchargée, cela devrait ressembler à une simple entrée de fichier.
Lorsqu'un fichier est téléchargé, il doit afficher l'aperçu de l'image et une zone de suppression en dessous.
Je ne cherche pas exactement ce design. Il pourrait avoir un aspect différent mais avoir les mêmes fonctionnalités.
Dans Magento 1, j'ai pu le faire, simplement en créant mon propre rendu de bloc
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;
}
}
Et en ajoutant ceci dans mon bloc de formulaire
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Mais je n'ai pas de bloc de formulaire dans Magento 2.
Je sais que je peux utiliser un nom de classe pour un champ de formulaire dans le fichier des composants de l'interface utilisateur
<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>
Évidemment, je dois créer cette classe, mais que dois-je étendre?
Tout ce que je sais, c'est que je dois implémenter l'interface Magento\Framework\View\Element\UiComponentInterface
mais je n'ai rien trouvé que je puisse étendre.
Ma vraie question est donc: puis-je étendre une classe pour obtenir le comportement souhaité? Sinon, comment puis-je commencer à créer ce rendu d'élément?