symfonyPHPの設定を上書きする方法

symfonyでは多くのプラグインが公開されています。
また公式サイトにあるプラグインは大抵symfonyコマンドでインストールできてしまいます。なんとも素敵。

その中でHTTPクライアント機能を提供してくれるプラグインがあります。それがsfWebBrowserです。
参照:http://www.symfony-project.com/trac/wiki/sfWebBrowserPlugin

GoogleやYahooのAPIを使ってアプリケーションを作りたい場合にはもってこいです。
ざっくりとインストール後にYahooのAPIを使うアクションを作ってみました。

 $b = new sfWebBrowser(array(),'sfCurlAdapter');
 $uri = "http://api.search.yahoo.co.jp/VideoSearchService/V1/videoSearch";
 $params = array(
        'appid' => 'あなたのアプリケーションID',
        'query' => '検索クエリー(UTF-8)'
      );
 $b->post($uri, $params);
 $res = $b->getResponseXml();

キャッシュ機能などはこのプラグインにはまだ未実装だったりしますが、シンプルで分かりやすいですね。
っと、ここで罠があります。
このプラグインは内部的にhttp_build_query関数を使ってパラメータを作成しているのですが、

string http_build_query ( array formdata [, string numeric_prefix [, string arg_separator]] )

symfonyのデフォルト設定ではPHPの設定(php.yml)でarg_separator.outputを"&"に上書きしてしまっているのです。
このため、どうやっても2つ目以降のパラメータが無効になってしまうため動かない!
(?appid=XXX&query=XXXとなってしまう。。)
これはセキュリティ面でエスケープを気にしなくて良いようにとの考慮からですが、明らかに今回は邪魔してしまっています。
プラグインを修正しても良いですが、プラグインに手を加えなくてもPHPの設定を上書きできればよいと。

というわけで、アプリケーションのconfigディレクトリにPHPの設定を行うファイルphp.ymlを作成し、
デフォルトの設定のコピーし、arg_separator.outputだけ変更したものを用意しました。

set:
  magic_quotes_runtime: off
  log_errors:           on
  arg_separator.output: \&  ## デフォルト設定は\&

check:
  magic_quotes_gpc:     off
  register_globals:     off

あとはいつもどおり symfony cc で設定のキャッシュをクリアして実行して無事成功。
phpの設定を上書きする方法を知らないともっとハマッてたかも。

ちなみに、setエリアは設定を上書きする項目で、checkエリアは設定が同じでなければウェブデバッグツールバーでお知らせしてくれます。

symfonyの設計の可視化

symfonyでアプリケーションを作成するのはコマンドからさっくり作れますが、
確認画面があり。。エラー画面があり。。。と遷移が増えてくるとどのファイルがどうなっているのかが分かりづらくなります。

そして、sooeyさんがsymfonyの処理フローの雛形を公開してくれています。
http://www.sooey.com/journal/2007/03/12/637/
すんごくいいです。

最終的な資料として残すことも大事ですが、

  1. 処理フローマップを印刷する
  2. 遷移だけ書き込む
  3. 命名する
  4. デジタル化

とするのがいいのかな。

誰かこのフローマップをAJAXな画面で書き出せて、なおかつその結果をsymfonyコマンドに流し込んでアプリケーションの雛形つくれるようなウェブアプリつくりませんか?(もう既に雛形というレベルではないですが。。)
ってそんなことまでできたらsymfony無敵です。