2016-09-10 8 views
0

私のTwigテンプレートに送信される変数の中には普通の古い変数があるので、それらをhtmlでエスケープしたいデフォルトの動作です)。しかし、私のテンプレートに送られる他の変数は、実際には__toString()レンダラーを持つオブジェクトです...これらのオブジェクトのいくつかは生のHTMLを送信します(例えば、TinyMCEやCKEditorのようなWYSIWYGエディターから)。オブジェクトは、{{印刷}}のときに出力をエスケープしないようにTwigに指示できますか?

テンプレートデザイナーがオブジェクトに|rawフィルタを使用する必要はありませんが、代わりに何らかの理由でオブジェクトがTwigに既にエスケープされていると伝えたいと思っています。

つまり、is_safeを設定するTwig関数の動作を変更しようとしていますが、テンプレートデザイナーは関数を使用する必要はありません。

など。私はその定義でis_safeパラメータを使用して、小枝関数を記述し、私のテンプレートでこれを持つことができる可能性:

figure_out_what_to_doはそれが必要かどうかを確認するために「何か」オブジェクトを検査するために知っている
{{ figure_out_what_to_do(something) }} 

(エスケープする)。しかし私には、これは "何か"のすべての出力の後に|rawを置くことを覚えておくことよりも良いことではありません。

{{ something }} 

を...と小枝がsomethingがオブジェクトであることを認識し、したがって、それはエスケープする必要があるかどうか、それを聞いてありますので、代わりに私はこれを行うことができるようにしたいと思います。

私は答えが「いいえ」と思っていますが、Twigの内部についてもっと知っている人が私に指針を与えてくれたら尋ねると思います。

ありがとうございました。あなたが代わりのHTML出力を返すことができ__toString()方法で

答えて

1

、次の操作を行います。return new Twig_Markup($html, 'UTF-8');は、このように安全としてマークしていないが

+0

をエスケープするためにこれはまさに私が探していたもの - ありがとう! (これがドキュメントのどこかにあったことを願います)。 PHPでは実際の文字列(オブジェクトではない)のみが返されるため、 '__toString()'では使用できません。しかし、私はこれを回避するために(twigが呼び出す魔法の '__get'メソッドを持つラッパーオブジェクトを持っていて、文字列かTwig_Markupオブジェクトを返すかどうかを決めるような)他の手段を使うことができます。 –

関連する問題