2013-03-31 22 views
17

ho creato un'estensione Twig:uscita Impedire la fuga in estensione funzione Twig

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

HI so che posso solo fare

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

... ma preferirei usare codice PHP in modo che tutto (da questa estensione 'immagine') non è sfuggito.

Non riesco a vedere questo possibile.

So che posso impedire che tutto l'escape in Ramoscello, ma voglio solo questa estensione non per sfuggire uscita, e tutto il resto per farlo.

risposta

22

Questa operazione può essere eseguita aggiungendo an option alla registrazione dell'interno.

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

Questo fornirà HTML di input senza escape e restituirà output HTML senza escape. Se è necessario lavorare con l'input HTML con escape, consultare l'opzione 'pre_escaped' => 'html'.

+0

NOTA! Puoi usare solo 'pre_escape' per i filtri, e l'OP usa specificamente una funzione, dove [pre_escape non ha effetto] (http://twig.sensiolabs.org/doc/advanced.html#functions). È necessario [sfuggire manualmente agli input delle funzioni] (http://stackoverflow.com/questions/28097270). – Brian

9

Per ramoscello estensione funzione fare questo

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