2016-04-08 4 views
1

私はHTMLを返す関数を持つクラスを持っています。Twigフィルタを使用しない関数から生のHTMLを返す

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

そして、私は出力にrawフィルタを使用し、その後、私の小枝テンプレートで、代わりに小枝が私のためにそれを逃れることの文字通りのHTML:

{{ myParserInstance.HTML | raw }} 

は、機能のための方法はあります(それはありませんa Twig Filter or Function)を使用して生のHTMLを返し、それをそのままレンダリングしますか?または、これをシームレスに行うTwigフィルタまたは関数を作成するにはどうしたらいいですか?例えば

が、私はような何かたくないになります。その代わり

{{ render(myParserInstance) }} 

を、私はちょうどHTML関数呼び出しを使用できるようにしたいと思います。これはすべて可能ですか、またはTwig機能を使用していますか、| rawを使用していますか?

答えて

2

まもなく、いいえ、ありません。

小枝は、あなたがrawフィルタを使用するか、小枝(see this answer)でautoescapeをオフにしない限り、あなたの方法のいずれかの小枝によって解析され、エスケープされますから復帰ので、どんなレンダリングエンジンです。

6

あなたは私が私のために完全に働いたSilvioQの答え、の支援でこれを書いている...安全な方法で

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

を対象オブジェクトを返すとTwig_Markupことができます。

私のケースでは、ヘッダーブロックにスタイルシートタグを追加するためのフィルタを作成していますが、ベースURLをハードコーディングする必要もなく、不要になったときにパラメータとして渡す必要もありません。 SilvioQのコードはうまく動作し、私の見解を邪魔にならないように保ちます。ここで

は、私は私のコードでそれを使用している方法は次のとおりです。私はまだこれに取り組んでいる

 
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'); 
    } 
} 

、私はまた、Javascriptのために別のものを必要とします。コードを変更したり、それがうまくいかない場合は、私の答えを更新します。

関連する問題