PEAR ライブラリにインクルードパスを通す
「require_once() が許されるのは小学生までだよねー」とは思うものの、 PEAR::Net_UserAgent_Mobile はすごく秀逸なライブラリなので、使わない手はないだろうということで使うことにしたわけですが。
問題は、 symfony でどこでインクルードパスを通すべきなのか。
「作法的なのあるのかなー。ないだろうなー。というか set_include_path() なんざロクに使ってないだろうなぁ」と思ってソースコードを検索してみたら完全に予想通りだったので、悩んでしまいました。
ライブラリがどこで使われるかっていうのは予測できないので、なるべくなら早い段階で読み込みたい。ということで、 config/ProjectConfiguration.class.php でインクルードパスを通してみることにしました。
まあ大したことやってないんですけどね。
<?php : $pear_lib_dir = sfConfig::get('sf_lib_dir') . DIRECTORY_SEPARATOR . 'pear'; if (is_readable($pear_lib_dir)) { set_include_path(get_include_path() . PATH_SEPARATOR . $pear_lib_dir); }
http://trac.co3k.org/changeset/18
というかパスが pear 決めうちなのを何とかしたいとか色々思うところはあったので、当初は config/settings.yml に pear_lib_dir っていう項目を作って、 sfConfig::get('sf_pear_lib_dir') とかいう風に取ってくるつもりだったのですが、ProjectConfiguration::setup() が読み込まれるタイミングは sfApplicationConfiguration のインスタンス生成時で、処理の序盤の序盤もいいところであって、要するにおそらく config/settings.yml をまだ読み込んでいない疑惑な訳です。
かといってこの対応はすごく格好わるいのでなんとかしたいところではあります。もしくは PEAR ライブラリを autoload するとかいやそれは無理だ。
(include_once() を使ってたらファイルを読み込めなくても落ちないから、キモイがそれなら autoload は使えるぞと思ったら、 Net_UserAgent_Mobile はバッチリ require_once() 使っててやっぱり残念でしたということに)