it-swarm.com.de

Warum werden Twig Vorlagenvariablen mit Markup nicht gerendert?

In meiner Vorlagenvorverarbeitungsfunktion habe ich eine Variable:

$test = "<p>this is a paragraph</p>";

und ich gebe es an meine Vorlage weiter:

$variables['test'] = $test;

und geben Sie es im Zweig aus:

{{test}}

aber anstatt einen formatierten Absatz zu erhalten, erhalte ich die ursprüngliche Ausgabe im Klartext:

<p>this is a paragraph</p>

Wie bekomme ich Drupal, um dies als normales HTML zu rendern?

7
RominRonin

Weil twig unsichere Inhalte automatisch maskiert und Ihre Inhalte nicht als sicher markiert sind.

Sie können explizit angeben, dass es sich um $test = Markup::create($test) handelt. aber du solltest sehr damit vorsichtig sein. Wenn es irgendeine Art von Benutzereingabe enthält, können Sie sich für XSS-Probleme öffnen.

Bessere Ansätze verwenden ein Render-Array wie ['#markup' => 'your text'], das standardmäßig eine bestimmte Anzahl von HTML-Tags zulässt, jedoch nicht alle. Sie können auch eine Inline-Vorlage verwenden, wie hier dokumentiert: https://www.drupal.org/node/231112 .

Twig versteht Render-Arrays von Haus aus, daher spielt es für Ihre Vorlage keine Rolle, ob Sie ein Render-Array oder eine Zeichenfolge bereitstellen.

14
Berdir

Dies sind zwei Möglichkeiten, um $ test in einen Absatz zu verpacken und an die Vorlage twig) zu übergeben:

$variables['test'] = [
  '#markup' => $test,
  '#prefix' => '<p>',
  '#suffix' => '</p>',
];

$variables['test'] = [
  '#type' => 'inline_template',
  '#template' => '<p>{{ text }}</p>',
  '#context' => [
    'text' => $test,
  ],
];
12
4k4