2017-06-08 1 views
0

Ich habe eine Zweigvorlage erstellt als eine Latex-Datei. Es funktioniert gut, außer dass es Zeichen für HTML ausgibt.Erstellen eines benutzerdefinierten Latex-Escapers für Zweig

So zum Beispiel gibt der DB die Zeichenfolge Rosie & Jim zurück.

Zweig macht das Rosie & Jim.

Für Latex brauche ich die &, um tatsächlich als \& zu rendern.

Deshalb denke ich, dass ich eine benutzerdefinierte escaper für Latex müssen wie hier erwähnt: https://twig.sensiolabs.org/doc/2.x/filters/escape.html#custom-escapers

Aber ich bin ein wenig grün, wenn es um Zweig kommt und kann keine Beispiele von tatsächlichen escapers überall nicht finden. Weiß jemand:

a) Ist das was ich eigentlich brauche?

b) Was muss ich tun, um einen zu machen?

+0

Wahrscheinlich möchten Sie ['{{latex | rohe}}'] (https://twig.sensiolabs.org/doc/2.x/filters/raw.html), wobei 'latex' die Twig-Template-Variable ist. –

+0

@JaredFarrish Das gibt nur die Rohdaten aus. Ich muss immer noch entkommen, nur anders. – benoliver999

+1

https://github.com/bobvandevijver/latex-bundle/blob/master/Twig/BobVLatexExtension.php –

Antwort

0

Richtig, so dass ich es als Dienst eingestellt habe und es von der Steuerung aus aufgerufen habe, wann und wo es gebraucht wird.

Nicht sicher, ob es beste Praxis ist, aber es funktioniert für mich.

Der Service:

<?php 

namespace AppBundle\FunBundle\Service; 

class Latex 
{ 

public function __construct($twig) 
    { 
     $this->twig = $twig; 
    } 

public function escaper() 
    { 
     // Get twig env 
     $twig = $this->twig; 
     // Start setEscaper called 'latex' - call it what you want 
     $twig->getExtension('Twig_Extension_Core')->setEscaper('latex', 
      function($twig, $string, $charset){ 
      // Replace every instance of '&' with '\&' 
      $string = str_replace("&", "\\&", $string); 
      } 
      return $string; 
     ); 
    } 
} 

dann in app/config/services.yml:

services: 
    app.latex: 
     class: AppBundle\FunBundle\Service\Latex 
     arguments: ['@twig'] 

Dann wird in einem Regler:

$latexer = $this->get('app.latex'); 
$latexer->escaper(); 

Und in dem Zweig Vorlage selbst :

{% autoescape 'latex' %} 
# latex/twig goes here 
{% end autoescape %} 

Endete aufschreiben es here auf meiner Website, die ein vollständiges Beispiel eines LaTeX escaper enthält.

Verwandte Themen