2013-03-31 10 views
17

Stworzyłem rozszerzenie Gałązka:wyjście Prevent ucieczki w Twig rozszerzenia funkcji

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

HI, że mogę po prostu zrobić

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

... ale wolałbym użyć kodu PHP, tak aby wszystko (z tego rozszerzenia "obrazu") nie jest chronione.

Nie widzę tego możliwego.

Wiem, że mogę zapobiec ucieczce wszystkich wyjść w Twig, ale chcę, żeby to jedno rozszerzenie nie wychodziło z wyjścia, i wszystko inne, aby to zrobić.

Odpowiedz

22

Można to zrobić, dodając an option przy rejestracji rozszerzenia.

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

Zapewni to poprawiony kod wejściowy HTML i zwróci kod HTML bez zmiany znaczenia. Jeśli potrzebujesz pracować ze zmienionym hasłem HTML, zobacz opcję 'pre_escaped' => 'html'.

+0

UWAGA! Możesz użyć 'pre_escape' dla filtrów, a OP używa konkretnie funkcji, w której [pre_escape nie ma żadnego efektu] (http://twig.sensiolabs.org/doc/advanced.html#functions). Musisz [ręcznie uciekać wejścia funkcji] (http://stackoverflow.com/questions/28097270). – Brian

9

Na gałązce rozszerzenie funkcji zrobić

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