I have a list of images, and I want access to both the direct path to the image, and the path with an image style applied to it available to a twig template. I’m grabbing the images in my .theme file like so.
$images = $node->get('field_image'); foreach($images as $image){ $image_style =DrupalimageEntityImageStyle::load('photos')->buildUrl($image->entity->getFileuri()), $image_path = file_create_url($image->entity->getFileuri()), }
I want to be able to access these attributes for each image by storing them in the $variables array.
I attempted to do so by using
foreach($images as $image){ $image_style =DrupalimageEntityImageStyle::load('photos')->buildUrl($image->entity->getFileuri()), $image_path = file_create_url($image->entity->getFileuri()), $variables['photos'][]['image_style'] = $image_style; $variables['photos'][]['image_path'] = $image_path; }
However that didn’t work and I received errors. After that I figured that maybe I needed to supply a more explicit associative array so I tried
$variables['photos'] = array(); $photo_paths = array(); foreach($images as $image){ $photo_paths += [ $i => [ 'image_style' => DrupalimageEntityImageStyle::load('photos')->buildUrl($image->entity->getFileuri()), 'image_path' => file_create_url($image->entity->getFileuri()), ], ]; $i += 1; } $variables['photos']= $photo_paths;
But then I receive the error
User error: “image_style” is an invalid render array key in DrupalCoreRenderElement::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
and
User error: “image_path” is an invalid render array key in DrupalCoreRenderElement::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
These errors continue for each image. I’m guessing that $variables can’t handle nested associative arrays? Is there a way I can use an associative array inside a twig variable? Or is there another way to accomplish the same task or storing the path and image style for each individual image to be displayed in a for loop in twig?