Je charge un fichier image non managé et souhaite le rendre dans un bloc, mais il doit être lié. J'ai un uri (public: // ...) et je peux rendre l'image en utilisant
$ build ['my_image'] = ['#theme' => 'image_style', '#style_name' => 'large', '#uri' => $ uri,];
Cela fonctionne, mais comment puis-je le rendre lié à une URL?
image_formatter est de rendre un champ d'entité, vous ne pouvez pas l'utiliser sans l'avoir.
Essayez d'utiliser un tableau de rendu pour le lien, comme ceci:
$type_link_nested_array = [
'#type' => 'link',
'#title' => ['#theme' => 'image_style', '#style_name' => 'large', '#uri' => $uri, ],
'#url' => Url::fromUri('https://www.drupal.org'),
];
Sans ajouter de style d'image (comme la question d'origine n'a jamais mentionné cela), j'ai trouvé que cela fonctionnait:
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\Core\Render\Markup;
$img = '<img src="path_to_my_image" />';
$rendered_image = render($img);
$image_markup = Markup::create($rendered_image);
$link = Link::fromTextAndUrl($image_markup, Url::fromUri('internal:/my_link_path'))->toString();
Vous auriez probablement besoin de rendre l'image vous-même, puis d'ajouter le lien autour d'elle. Donc quelque chose comme:
$img_render_array = [ '#theme' => 'image_style', '#style_name' => 'large', '#uri' => $uri, ];
$img = render($img_render_array)->__toString();
$build['my_image']['#markup'] = '<a href="/">'.$img.'</a>';