0

シンプルなTwigフィルターを作成しました

class Twig_Extension_Form extends Twig_Extension{
public function getName() {
    return 'Form';
}

public function getFilters() {
    return [
        'fLabel'=>new Twig_Filter_Method($this,'label_filter')
    ];
}

public function getFunctions() {
    return [];
}

public function label_filter($string,$id=null,$class=null){
    return '<label'.(!is_null($id)&&is_string($id)?' id="'.$id.'"':null).(!is_null($class)&&is_string($class)?' class="'.$class.'"':null).'>'.$string.'</label>';
}}

フィルターは機能しましたが、ブラウザーにコードを表示すると、エンティティの引用符が置き換えられます。代わりにエコーを使用すると、リターンフィルターが正常に機能します。

ラベルがすぐに表示されるとは限らないため、返品を使用したい。

4

3 に答える 3

5

問題が解決しました

public function getFilters() {
    return [
        'fLabel'=>new Twig_Filter_Method($this,'label_filter',['is_safe'=>['html']])
    ];
}

このフィルターの自動エスケープを無効にします。の 3 番目のパラメータTwig_Filter_Method

['is_safe'=>['html']]

また

array('is_safe'=>array('html'))PHP < 5.4.x で

ヒントをありがとう。役に立ちました。

于 2013-07-04T09:10:35.440 に答える
1

はい、生フィルターを使用してください!

または、自動エスケープをグローバルに無効にしたい場合は、設定で行うことができます:

twig:
# ...
  autoescape: false

またはテンプレートでより細かく、これを専用のコードブロックとして定義できます

{% autoescape false %}
...
{% endautoescape %}

ここを参照してください: http://twig.sensiolabs.org/doc/tags/autoescape.html

于 2013-07-04T09:03:07.693 に答える
0

すべての人のために :

フィルターを使用します。

{{あなたの方法() | 生}}

于 2013-07-04T08:51:55.090 に答える