symfonyコマンドでPhingエラーが出たとき

symfonyが呼んでいるPhingが、SfPeerBuilder.phpを見つけられないというエラーを吐いたとき

[PHP Error] Phing::include_once(symfony/symfony/addon/propel/builder/SfPeerBuilder.php): failed to open stream: No such file or directory [line 863 of C:/php-5.2.5/PEAR/symfony/vendor/phing/Phing.php]
[PHP Error] Phing::include_once(): Failed opening symfony/symfony/addon/propel/builder/SfPeerBuilder.php' for inclusion include_path='パス')

propel.iniの中のpropel.output.dir=以降のディレクトリ設定(sfPeerBuilderの場合はpropel.builder.peer.classとか)が違う可能性があります。他者のsymfonyプロジェクトを持ってきたときによく違っています。

ローカルで作った別のsymfonyプロジェクトからpropel.iniの該当部分をコピーすると直ったり。もちろん、元のプロジェクトの作者が意図的に変えているところは理解して残さないといけませんけど。

symfony1.1のtaskの作り方・使い方

symfony1.0ではinit-batchでCLI処理を作っていましたが、1.1ではtaskというのが導入されたようです。ブログで書かれていたチュートリアルを見ながら試してみます。バージョン1.1のCookbookにもこの解説は入るようです。

symfonyコマンドが元々呼び出せるタスク群(symfony generate:moduleとか)と同じように自分の作ったタスクを登録し、symfonyコマンドから呼び出すことができます。

$ symfony generate:task akky:hello-world

これで、akky:hello-worldという新タスクが登録されます。

symfonyコマンドを実行すると、タスクの一覧にもこのakky:hello-worldが出てきます。実行も既存タスクと同じで、

$ symfony akky:hello-world

このタスクの本体は、lib/task/akkyHelloworldTask.class.php にできています。

この生成されたコードの中に、タスクのヘルプを書いたりタスクが受け取れるパラメータを指定したり、そしてタスクの本体処理を書けます。

protected function execute($arguments = array(), $options = array())
{
// add code here
echo 'hello, world';
}

これで実行すると、symfonyコマンドからhello, worldを出力させることができました。

パラメータの受け取り方の詳細や、タスクから他のタスクを呼ぶ方法、環境に応じた処理の切り分け方法などは、元のブログ記事をどうぞ。

あと、generate:taskで作成はわかったけど、作ったタスクを消すにはどうするの、と該当するsymfonyコマンドが見当たらなくて迷ったのですけど、taskファイルを消してしまえばいいみたいです。

symfonyについて日本語で語りあうチャットが開始

人気PHPフレームワークsymfonyの新しいチャットルームが始まりました。symfonyを使っている人、興味のある人が気軽に情報交換できる場です。既に20人ものsymfony開発者が参加しています。

Skypeのパブリックチャットルームを使っているので、Skypeが必要です。スカイプはWindows, MacOSX, Linuxで動きます。

スカイプが起動したら、 http://tinyurl.com/5ek5xg にアクセスしてください。

僕は電話はほとんど使わないけど、Skypeチャットはよく使います。複数のパソコンからつなげることができて、それぞれで過去の発言をちゃんと読めるのが、某メッセンジャーより便利ですよ。

スカイプのチャットルームがはじめての方のために、便利な設定をいくつか紹介しますね。

デフォルトでは、誰かが発言するたびに、タスクバーが光ったり音がなったりします。これは人によっては邪魔でしょう。

チャットメッセージが来たときの音の通知を消す

メインウィンドウの[ツール]-[設定]-[サウンド]で、[チャットメッセージが着信したとき]のチェックをはずします

チャットルームからの通知を抑制する

チャットウィンドウの[オプション]-[チャット通知設定]で、[通知機能無効]をチェックします。

または、こっちのほうがオススメですが、同じ画面で[以下の単語が現れた時のみ通知]を選び、スペース区切りで「この単語が出てきたら通知してほしい」という単語を並べます。たとえば、

akky akimoto 秋元

とか。こうすると自分が呼ばれたときだけ通知が来ます。

チャットルームを閉じるとき、後で開きやすいように

チャットルームを閉じても、チャットには参加し続けていて、その間の会話も後で読むことができます。ただ、閉じたときに元のチャットルームを探して開くのがたいへんな場合もあるので、チャットウィンドウから[ブックマーク]-[このチャットをブックマーク]で、今いるチャットルームをブックマーク保存できます。

[関連]

#symfony-ja Skype Public Chatが出来ました

symfony1.1のアーキテクチャ解説

Fabienさんによる図入りのアーキテクチャ解説が出てます。

symfony1.1では、クラスとクラスの間の依存関係が減らされて(decoupled)います。YAML操作とかForm処理、データベースアクセスやキャッシュなどのクラスはそれぞれが単体でも呼び出せるようになっていて、そのためには


require_once '/path/to/sfCoreAutoload.class.php';
sfCoreAutoload::register();

の2行を書くだけ。あとはsymfonyのオートローダがよしなにやってくれます。これらがsymfony プラットフォーム

真ん中の方の図にあるように、MVCフレームワークを構成しているクラス群は、symfonyプラットフォームのクラスを必要に応じて呼び出しているけれども、symfonyフレームワークのMVCを使わずに、symfonyプラットフォームの便利なクラスだけを使うこともできるし、使わないものは使わない、そう、YahooがDel.icio.us2.0でsymfonyは採用したけどpropelは採用しなかったように、柔軟に選択することができる、ということになります。

バージョン1.1では、クラス間の依存関係をZend Framework以上にde-coupleした、と言っています。

symfony is one of the most decoupled framework available in PHP, even more than the Zend Framework

Zend Frameworkと比べ、いやいや、たとえば、symfony1.1のsfFormは、ビューやコントローラから切り離しにくいZend_Formよりも、より単独でMVCを絡ませずに使うこともできる、ということです。