というわけで、未完成な雰囲気が溢れる symfony-bootstrapper を使って
プロジェクトを始めるまでをまとめます。

一先ず無知なくせに人柱になってみました。こんにちはこんにちは。

良い子の Symfonist のみなさんはドキュメントにあるとおり、 symfony-sandbox を使ったほうが良いです。
さらに、状況は刻々と変化しております。 最新の情報は
こことは別でちゃんと仕入れてください。

まず、 symfony-bootstrapper の symfony.phar でプロジェクトを作成します。
この点は、 balibali 先生の言うとおりです。

“これだけだとシンプルすぎて動かないので vendor 作ったり .htaccess 置いたりは必要です”

人のことなので、 vendor/ やら .htaccess やらを用意します。

http://github.com/symfony/symfony-bootstrapper/blob/master/bin/install_vendors.sh

を使うと、 vendor がバッチリ導入できる予感がしますが、そんなワケにもいかないです。
どうも Symfony2 は名前空間を変更したりで、Doctrineなどでやや古いタグにされてしまうと
上手く動かないのです。

やや強引ですが、 git checkout -b v2.0.0-BETA3 2.0.0-BETA3 のように
タグを切り替ている行をコメントアウトしてしまいます。
その後、プロジェクトのディレクトリに移動して、 install_vendors.sh を実行します。

これで、 vendor/ が用意されましたが、まだ動きません。
web/ に .htaccess を用意します。これは symfony1.4 のプロジェクトからコピーでなんとかなります。

問題はここからで、ここで動くと思っていたらやっぱり動きません。

なんでだろう???と探ったところ

app/AppKernel.php の一部を変更する必要があるようです。

    public function registerBundleDirs() {
        return array(
            'Application'     => __DIR__.'/../src/Application',
            'Bundle'          => __DIR__.'/../src/Bundle',
            'Symfony\\Bundle' => __DIR__.'/../src/vendor/Symfony/src/Symfony/Bundle',
        ); }

ちょうど、こんな行がありますが、 Symfony\\Bundle のパスは

__DIR__.’/../src/vendor/symfony/src/Symfony/Bundle’

に変えてやります。なぜか大文字と小文字が違うようです。

あとは、 asset(デバックページの画像とか) をちゃんと表示したいので

$ ./app/console web

これで、 web/app_dev.php とかにアクセスすると、なんとか動いている雰囲気を
味わって謎の充実感を得ることが出来ます。

なんか面倒なので、公式の言うとおり symfony-sandbox で遊んだほうが良いです。
【追記】 phpmatsuriでkrisに聞いたら、やっぱり現状 sandboxで遊ぶべきということが判明しました。

あとウソチクもあるかもしれないので、ちゃんと公式から出るまで待つべきです。

うぃーん。

OpenPNE3は国際化に対応できる事を売りにしているわけですが、
まだまだです。
その中の取り組みとして、Timezoneに対応させる必要があるわけですが、
設定項目があるものの機能していないことに気づいた人は多いかもしれません。

今回、海外に行く機会もあるので折角なので対応させたよ。

データのTimezone対応としては、以下の手法を使いたいと思います。
http://kriswallsmith.net/post/136226720/doctrine-timestamps-and-user-timezones

独自に、Doctrine_Recordを継承したクラスを作成し、 _set() および _get() の挙動を変えたものを利用するようにする手法です。

OpenPNE3.6beta4-dev 時点では、 opDoctrineRecord を利用しているのでこれをいじればよさそうです。

ユーザ側の設定変更→言語とタイムゾーンの設定から変更することのできるタイムゾーン情報は
Member::getConfig(“time_zone”); により取得ができます。
この画面で保存される値は、PHPでサポートされているタイムゾーンによるものなので、date_default_timezone_set() に渡してしまっても問題なさそうです。

あとは、利用時にタイムゾーンを適切に管理したいところですが、これは symfony の sfUser の言語周りの挙動と同じように
してみようと思います。これを opSecurityUser で行ないます。

そんな感じで出来上がったのが、僕が本線にはまだいれていないものの、アグレッシブな改善を行なっている
「iroiro-kaizen」ブランチに行った以下の2つの変更です。
http://github.com/kawahara/OpenPNE3/commit/cbf84f27036c7f40dccd97ccb4efb69da96dbf1c

http://github.com/kawahara/OpenPNE3/commit/486e5bded4501e7f3a056902e3d44de6cc64d267

*ためしに、運営しているSNSで導入してなんとか動作していますが、無保証・無テスト品です。
*2つのコミットには順序がありますので、ご注意下さい。

サマータイムとかも自動的になんとかしてくれるっぽいのか。こりゃ面白い。

ちなみに、「iroiro-kaizen」ブランチでは、未完成かつ未テストなものの、
OpenPNEの為になるコミットを継続的に行なっていく予定です。
実はメール周りの国際化や、メールの設定周りなどを脳みそから漏らしていますので
本線に入るまで我慢出来ない人は、参考にしてみてもいいかもしれません。
(もちろん無保証です。)

あと、しばらく(他のことが忙しくなり)本線で戦うことができなくなりそうなので
勝手に本線にマージしてしまっても問題ないです。