2013-03-31 3 views
17

Я создал расширение Twig:Предотвращение маскирование в расширении функции Twig

{{ image ("image.png", 200) }} 

HI знаю, что я могу просто сделать

{{ image ("image.png", 200)|raw }} 

... но я предпочел бы использовать PHP код так, чтобы все (из этого расширения «изображение») не сбежит.

Я не вижу этого.

Я знаю, что могу предотвратить все выходные экраны в Twig, но я просто хочу, чтобы это одно расширение не удалялось, и все остальное для этого.

ответ

22

Это можно сделать, добавив an option при регистрации продления.

public function getFilters(){ 
    return array(
     // ... 
     'image' => new \Twig_Filter_Method($this, 'imageFilter', 
      array('is_safe' => array('html')) 
     ), 
     // ... 
    ); 
} 

Это обеспечит несвязанный входной HTML-код и возвращает невозвращенный вывод HTML. Если вам нужно работать со скрытым вводом HTML, см. Опцию 'pre_escaped' => 'html'.

+0

ВНИМАНИЕ! Вы можете использовать «pre_escape» для фильтров, а OP специально использует функцию, где [pre_escape не имеет эффекта] (http://twig.sensiolabs.org/doc/advanced.html#functions). Вам необходимо [вручную выполнить функции ввода] (http://stackoverflow.com/questions/28097270). – Brian

9

Для прутик расширения функции сделать это

public function getFunctions() 
{ 
    return array(
    new \Twig_SimpleFunction(
     'image', 
     array($this, 'image'), 
     array('is_safe' => array('html'))) 
); 
}