En Drupal 7, se podría hacer la siguiente línea:
t('Visit !mylink', ['!mylink' => l('my website', 'http://example.com')]);
Pero eso ya no funciona en Drupal 8 o 9 😞. Hasta ahora, he probado esto:
Primero creo un enlace, estilo Drupal 8:
$mylink = Link::fromTextAndUrl('my website', Url::fromUri('http://example.com'));
Luego intente crear una cadena que pueda imprimirse. He intentado toString()
:
t('Visit @mylink', ['@mylink' => $mylink->toString()]);
Sin embargo, se supone que no debemos hacer esto. Los documentos de la API dicen:
No utilice este método para representar un enlace en un contexto HTML. En un contexto HTML, debe usarse self :: toRenderable () para que se mantenga la información de la caché de procesamiento.
Entonces trato de usar toRenderable()
:
t('Visit @mylink', ['@mylink' => render($mylink->toRenderable()]);
Pero a PHP 7.2 no le gusta. La llamada a t()
produce el siguiente Aviso:
Aviso: Solo las variables deben pasarse por referencia ...
Bastante justo, pero ¿cómo se hace esto?
No pude encontrar cómo hacer esto descrito en ninguno de los documentos obvios, como:
- https://www.drupal.org/docs/security-in-drupal/sanitizing-output
- https://www.drupal.org/docs/security-in-drupal/writing-secure-code-for-drupal
Entonces mi pregunta es:
¿Cuál es la mejor práctica para escribir un enlace a la pantalla en Drupal 8?
(Entorno: Ubuntu 20.04 LTS, Drupal 8.8.6 (core + devel), código de procedimiento, por ejemplo hook_help()
).