0

小枝テンプレートに渡されたオブジェクトへのメソッド呼び出しで小枝が出力をエスケープする際に問題が発生します。フィルタを使用してこれを回避できることはわかって|rawいますが、特定のメソッドが安全であるとオブジェクトで簡単に指定できる方法があるので、生のフィルタが不要になることを期待していました。

4

1 に答える 1

2

通常のオブジェクト/エンティティはテンプレートエンジンを認識していない(そして認識してはならない)ため、オブジェクト自体のメソッド呼び出しをHTMLセーフにすることはできません。

ただし、テンプレートエンジンを認識している場合は、小枝のフィルターまたは関数であり、その定義でhtmlセーフとマークできます。

したがって、実行する必要があるのは、HTMLセーフの小枝フィルターを実装してオブジェクトを渡し、フィルター関数内でオブジェクトのメソッドを呼び出すことです。

テンプレートは次のようになります。

<p>{{myObj.getHtmlRepresentation()|raw}}</p>

次に、小枝フィルターを実装し、テンプレートを次のように変更する必要があります。

<p>{{myObj|html_representation}}</p>

そして、小枝の延長は次のようになります。

class MyTwigExtension {

    public function getFilters(){
       return array(
        // the magic is the is_safe=>html option
        'html_representation' => new \Twig_Filter_Method($this,'htmlRepresentation',array('is_safe'=>array('html'))),
    }

    public function htmlRepresentation($obj){
        return $obj->getHtmlRepresentation();
    }

 }

設計上の考慮事項の1つ:オブジェクトが何らかのビジネスオブジェクトのエンティティである場合、htmlは作成されませんが、htmlの作成をテンプレートまたは小枝フィルターに移動する必要があります。

于 2012-10-18T08:18:14.467 に答える