2016-04-08 6 views
1

Ich habe eine Klasse mit einer Funktion, die HTML zurückgibt.Raw-HTML von einer Funktion ohne Twig-Filter zurückgeben

class MyParser { 
    public function getHTML() { 
     return '<a href="#">Hello World</a>'; 
    } 
} 

Und dann in meinem Zweig Vorlage verwende ich die raw Filter zur Ausgabe des wörtlichen HTML anstelle von Twig es für mich zu entkommen:

{{ myParserInstance.HTML | raw }} 

Gibt es eine Möglichkeit für eine Funktion (das ist nicht a Twig Filter or Function), um rohes HTML zurückzugeben und es so zu rendern? Oder wie würde ich einen Twig Filter oder eine Funktion erstellen, die das nahtlos für mich erledigt?

Zum Beispiel habe ich würde nicht will so etwas wie:

{{ render(myParserInstance) }} 

Stattdessen würde Ich mag nur in der Lage sein, den HTML Funktionsaufruf zu verwenden. Ist das überhaupt möglich oder bin ich mit einer Twig-Funktion fest oder verwende | raw?

Antwort

2

Kurz, nein, ist es nicht.

Zweig ist die Rendering-Engine so alles, was Sie von jedem Ihrer Methode zurückkehren wird durch Zweig analysiert werden und entkam, wenn Sie die raw Filter verwenden, oder Sie schalten Sie den autoescape in Zweig (see this answer) ab.

6

können Sie zurückkehren und Twig_Markup Objekt Objekt in sicherer Art und Weise ...

class MyParser { 
    public function getHTML() { 
     $rawString = '<a href="#">Hello World</a>' 
     return new \Twig_Markup($rawString, 'UTF-8'); 
    } 
} 
0

ich diese Antwort der zur Unterstützung SilvioQ schreiben, was für mich perfekt gearbeitet.

In meinem Fall erstelle ich einen Filter, um ein Stylesheet-Tag in einen Headerblock einzufügen, ohne dass ich mich darum kümmern muss, die Basis-URL fest zu codieren oder als Parameter an die Ansicht zu übergeben . Der Code von SilvioQ funktioniert gut und hilft mir, den Überblick zu behalten.

Hier ist, wie ich es in meinem Code bin mit:

 
class AppExtension extends AbstractExtension 
{ 

    public function getFilters() { 
     return array(
      new TwigFilter('css', array($this, 'cssLinkFilter')), 
     ); 
    } 

    public function cssLinkFilter($cssName){ 
     $link = sprintf('', getBaseURL(true), $cssName); 
     return new \Twig_Markup($link, 'UTF-8'); 
    } 
} 

Ich bin immer noch daran arbeiten, ich brauche auch ein anderes für Javascript. Wenn ich meinen Code ändere oder es nicht funktioniert, werde ich meine Antwort aktualisieren.

Verwandte Themen