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

Comment Form

Remember Me?


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

Return to Page Top