2012-03-09 3 views
18

Я создал пользовательский тег, который должен работать так:Symfony2/Twig: как сказать обычай прут тег НЕ избежать выхода

{{ thumbnail(image.fullPath,620) }} 

, к сожалению, я должен использовать это так

{{ thumbnail(image.fullPath,620)|raw }} 

Есть ли способ unescape непосредственно в расширении ветки?

Мое расширение регистрирует код миниатюрного как это:

public function getFunctions() 
    { 
     return array(
      'thumbnail' => new \Twig_Function_Method($this, 'thumbnail'), 
     ); 
    } 

ответ

57

Третий аргумент Twig_Function_Method::__construct() представляет собой массив параметров функции. Одним из таких вариантов является is_safe, который определяет, будет ли функция выдает «безопасный» HTML/JavaScript код:

public function getFunctions() 
{ 
    return array(
     'thumbnail' => new \Twig_Function_Method($this, 'thumbnail', array(
      'is_safe' => array('html') 
     )) 
    ); 
} 
+0

Благодарим за это. Это указано в документации? Я не мог найти его, но, возможно, я не выглядел достаточно тяжело. –

+1

@StephenOrr см. Ссылку в ответе Крозина. – acme

+0

спасибо, это помогло мне $) Можете ли вы добавить ссылку на руководство для этого? хотите знать, что может быть больше, чем «html» варианты – user1954544

3

Прут делает это так:

class Twig_Extension_Escaper extends Twig_Extension 
{ 
... 
    public function getFilters() 
    { 
     return array(
      new Twig_SimpleFilter('raw', 'twig_raw_filter', array('is_safe' => array('all'))), 
     ); 
    } 
... 
} 
... 

function twig_raw_filter($string) 
{ 
    return $string; 
} 
8

Crozin's answer является правильным, но потому, что \Twig_Function_Method теперь осуждается вы можете использовать \Twig_SimpleFunction как таковой:

return [ 
    new \Twig_SimpleFunction('thumbnail', [$this, 'thumbnail'], [ 
     'is_safe' => ['html'] 
    ]), 
]; 

 Смежные вопросы

  • Нет связанных вопросов^_^