Symfony Tips: Error, Output Escaping
- Date
- 2007-10-18 (Thu)
- Category
- symfony
今日は手短に symfony 設定ネタなどを。
dev 環境で標準出力への抑制
前にも『Symfony で Json を出力』で少し書きましたが、僕は symfony を使って XML やら JSON やら YAML やらをよく生成します。PHP を database の出力用 template にするわけですね。あとはがりがり javascript とか、flash なんかの client side アプリを書いていきます。効率の面から云うと PHP というかサーバ側でもう少し連携というか framework の中から出来る方がいいのかもしれないけれども、まだそこまでは至って居ません。
ともかく。僕みたいに symfony を使って XML やら JSON やら YAML を吐き出させる人にとって、dev 環境が(標準)出力に混ぜる PHP_NOTICE と PHP_WARNING が結構しんどいです。特に XML 文にエラーが混じると、正書式でなくなりプロセスが止まります。出力を止めるには…
/apps/APP_NAME/config/settings.yml
で
dev: .settings: # E_ALL | E_STRICT = 4095 # error_reporting: 4095
と、error_reporting をコメントアウトします。もちろん、これでも php.ini に設定したエラーログには出ます。
Output Escaping の設定
symfonyで開発日記 : symfony tips vol.1 で学びました。細かいですが直ぐに役に立つ事ばかりで、非常に興味深いプレゼンです。是非、video と配布資料をご覧になる事をお勧めします。というわけで、その中で僕もこれで知った、Output Escaping のやり方を備忘録がてら、紹介します。
設定は以下のように。
/apps/{app}/config/settings.yml
all:
.settings:
escaping_strategy: both
escaping_method: ESC_ENTITIES
こうすると、template で出力される変数が全て HTML 実体参照に変換されます。
どうしても変換したくない場合(例えば上述の XML を直接出したい、とか)は2つ方法があります。
String 型の変数の場合
要するに echo で直接出せるものですね。例えば actions.class.php で
public function executeFoo ()
{
$this->output = "& is ampersand.";
}
のようにあると、fooSuccess.php では
<p>Escaped: <?php echo $output; ?> </p>
<p>Original: <?php echo $sf_data->getRaw('output'); ?> </p>
とします。
Object から method を呼び出す場合
ちょっとわかりにくいですね。僕もあまりしないんですが。例えば actions.class.php で
public function executeFoo ()
{
$this->obj = new SomeObject();
}
のようにあって SomeObject インスタンスは echo() という method で、引数を直接出力できるとします。fooSuccess.php では
<p>Escaped: <?php $obj->echo('& is ampersand.'); ?></p>
<p>Original: <?php $obj->echo('& is ampersand.', ESC_RAW); ?></p>
という風に、引数の最後に ESC_RAW というおまじないを入れるといいそうです。
ところで、今日は Symfony が公開されて 2年目の誕生日だそうです。Bonne Anniversaire! お誕生日おめでとう!
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://blogs.grf-design.com/mt/mt-tb.cgi/236
- Listed below are links to weblogs that reference
- Symfony Tips: Error, Output Escaping from The Croton