2016-06-13 13 views
1

私はTwigでいくつかの画像を動的に追加しようとしています。だから私はsetImgServiceと呼ばれる新しいTwig関数を定義しました。これは基本的にサービス名のためにchechsし、それに応じて、その画像に従っていくつかのHTMLコードを返します。Twig関数でHTMLコードを返して挿入するには?

機能コード:

$setImgService = new Twig_SimpleFunction('setImgService', function($serviceName){ 
    switch ($serviceName){ 
     case "Analitycs": 
      return '<img src="assets/img/analitycs.png">'; 
     case "Hosting": 
      return '<img src="assets/img/hosting.png">'; 
     case "SEO": 
      return '<img src="assets/img/seo.png">'; 
     case "Maintenance": 
      return '<img src="assets/img/maintenance.png">'; 
     case "Your own domain": 
      return '<img src="assets/img/domain.png">'; 
     case "BackUp": 
      return '<img src="assets/img/backup.png">'; 
    } 
}); 
// Add function to Twig 
$twig->addFunction($setImgService); 

しかし、私は

{{ setImgService('serviceName') }} 

を使用する場合には、プレーンテキストのようなHTMLコードを返します。

お願いします。

答えて

1

Twigはデフォルトで出力をエスケープします。関数を使用するか、Twig_Markupを返すことで、出力を安全とマークしてエスケープされないようにすることができます。の中にHTMLを表示するには、次のように入力します。

生フィルタ

{{ setImgService('serviceName') | raw }} 

Twig_Markup

$setImgService = new Twig_SimpleFunction('setImgService', function($serviceName){ 
    switch ($serviceName){ 
     case "Analitycs": 
      return new Twig_Markup('<img src="assets/img/analitycs.png">', 'UTF-8'); 
     case "Hosting": 
      return new Twig_Markup('<img src="assets/img/hosting.png">', 'UTF-8'); 
     case "SEO": 
      return new Twig_Markup('<img src="assets/img/seo.png">', 'UTF-8'); 
     case "Maintenance": 
      return new Twig_Markup('<img src="assets/img/maintenance.png">', 'UTF-8'); 
     case "Your own domain": 
      return new Twig_Markup('<img src="assets/img/domain.png">', 'UTF-8'); 
     case "BackUp": 
      return new Twig_Markup('<img src="assets/img/backup.png">', 'UTF-8'); 
    } 
}); 
+0

これは、より安全なTwig_Markupを返しているように見えます。私はそれを試みるつもりです。 – danielcode7

関連する問題