I'm trying to change the output of an image field so that I can display it using a Javascript image gallery. I have the basic field formatter set up, but I'm having trouble finding the correct place to override the theme that displays the <img> tag itself.
I'm overriding the viewElements function of the core ImageFormatter:
class ImageGalleryFormatter extends ImageFormatter { /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items) { $elements = parent::viewElements($items); foreach ($elements as &$element) { $element['#theme'] = 'imagegallery_format'; } $elements['#attached']['library'][] = 'imagegallery_formatter/light-gallery'; return $elements; } } There I can set my custom Twig theme for each element, but that theme only writes the stuff directly around the <img> tag, not the tag itself. The theme provides access to an {{ image }} variable that renders the actual image. I tried accessing the variables inside the image like {{ image.uri }}, but that didn't work. I know the information I need is in there as I dumped the image variable in Twig and can see the array, but I can't access it from here.
From the Twig debug output I know that 'core/themes/classy/templates/field/image.html.twig' is the theme I need to override, but I can't find a way to do that from my module. I read the source of the core ImageFormatter viewElements function, but I don't see the image variable there and don't understand how I can modify it.
How can I override the theme that renders the <img> tag of an image field in my field formatter?