symfonyのキャッシュマネージャーが取れないとき

symfonyで、キャッシュが効いているページを強制的にクリアしたいとき、

  $cacheManager = $this->getContext()->getViewCacheManager();
  $cacheManager->remove('quiz/index?id='.$quizIdToRemove);

とかやってたのですが、デバッグ環境でエラーが出てしまいました。

Fatal error: Call to a member function set() on a non-object in ...

実環境でエラーにならないのでうんうん悩んで調べてみたら、デバッグ環境ではcache: off にしてました。getViewCacheManager()はキャッシュ使ってなければnullを返すようです。

# 考えてみたら当たりまえか

問題は、これがfatal errorで止まっていたためにトランザクションが完了していなかったことです。

cacheManagerを取得したときは、必ずnullチェックして、キャッシュが使われてるときだけ呼び出しましょう。 > 自分

Delphi for PHP作者の来日記まとめ

先月の第40回PHP勉強会@関東は、スペインからDelphi for PHPの作者Jose Leonさんを迎えてのスペシャルだったわけですが、Joseさんの日本滞在の感想等が彼のブログで上がっていたのでご紹介しておきます。

Delphi for PHP » Developer Summit 2009 – Japan

デブサミ初日の感想。参加者の多さと熱心さに感心されているようです

Delphi for PHP » Developer Summit 2009 – Japan (II)

デブサミ二日目。彼自身のセッションがあったことの報告です。そのあと、各メディアとのインタビューに臨んだようです。

Delphi for PHP » PHP Camp

PHP勉強会とそれに続く泊まりでのハッカソンの感想。勉強会で発表されたOpenPear等にも言及されてます。

Delphi for PHP » Developer Camp 2009 and Open Source Conference at Japans Electronics College

オープンソースカンファレンス(OSC)の感想。写真が「日本」ですね。カメラ量販店の技術書棚も印象に残った様子。

Matzことまつもとゆきひろさんとのツーショット写真も。Delphi for Rubyの可能性について話したとか。

最後は、取材を受けて日本で記事になったページをそれぞれ紹介しています。

symfony APIがブラウザから直接検索できるように(OpenSearch API)

本家ブログでの発表から。symfony APIの検索フォームが、OpenSearch APIで提供されるようになりました。

syfony公式ページに行くと、ブラウザ右上のサーチボックスが変化して、OpenSearchに対応していることを示してくれます。Firefox3ではこんな感じ。

symfony API 1.2を追加

すると、このあと、サーチボックスでsymfony APIが選べるので、ここにsymfonyフレームワークのクラス名や関数名を入れると、

APIマニュアルの該当ページにジャンプします。

Windows+cygwin+sshで”Could not create directory”が出るとき

エラーメッセージでは

Could not create directory ‘/home/(ユーザ名)/.ssh’.

とか出ますが、cygwinが認識するあなたのホームディレクトリはC:ドライブのルートとかではなくてcygwinのインストールディレクトリなので、たとえば、

C:/cygwin/home/akky/.ssh/

というディレクトリを作れば、そこにsshの設定を書き込んでくれます。

‘.ssh’というドットで始まるディレクトリの作り方は、.htaccessとかのファイルの時と同様ですが、GUIでは作れない(エラーになる。ムキー)ので、”ssh”とでもして作っておいて、コマンドプロンプトでその”ssh”があるディレクトリへ移動して、

> ren ssh .ssh

でその名前にできます。

cygwinの設定ファイルを変更してまったく別のディレクトリを使う手もあると思います。あくまで一例。

symfonyのsync(1.0の場合)、project:deploy(1.2の場合)がsshを呼び出す場合に上のエラーが気になる場合の対処でした。

[symfony] プラグインを簡単に作るためのプラグインsfTaskExtraPlugin

symfonyのプラグインはPEARのパッケージシステムを使っているのですけど、PEARのパッケージングって結構面倒で、僕はあまり好きではありません。PEARにもパッケージを作るためのツールがあるのですが、PHPのスクリプトを書くことになります。

symfony1.2には、symfonyのパッケージを作ることに特化したタスクがsfTaskExtraPluginという名前で提供されています

まだalpha版なので、alphaを明に指定してインストールします


$ symfony plugin:install -s alpha sfTaskExtraPlugin

このプラグインの中のパッケージ作成コマンドを呼ぶと、plugins/ディレクトリの下にある特定のプラグインを、PEARパッケージにしてそこに作ってくれます。


$ symfony plugin:package sfFaqPlugin

これだけで、plugins/sfFaqPlugin/sfFaqPlugin-1.1.0.tgz ができます。(プラグイン名やバージョン番号はサンプル)

プラグインになっていれば、symfonyコマンドでinstall/uninstallを管理できます。


$ symfony plugin:install /sandbox12/plugins/sfFaqPlugin/sfFaqPlugin-1.1.0.tgz

そこにあるpackage.xmlを使ってパッキングしてくれるので、xmlを開いて適度に編集することでバージョンや含むファイルを変えることができます。package.xmlが無い場合は、対話形式でpluginの説明や開発者の名前などが尋ねられるので、順番に入れていくとpackage.xmlも作成してくれます。

なので、たとえば、symfony1.0でしか動かないとpackage.xmlに書いてあるせい「だけで」symfony1.2にインストールできないpluginがあったとしたら、それをtarでplugins以下に展開して、package.xmlのrequire versionだけ1.3未満までオッケーにし、このタスクでパックすれば、1.2対応のpluginができるということです。

もしそういう風に1.2非対応のプラグインを1.2で使って、実績もあるなら、前のエントリで書いたように開発者になって公式サイトにアップするのもいいでしょう。

sfTaskExtraPluginには他に、pluginsの下に一からプラグインを作るためのgenerate:plugin、pluginの中にmoduleを追加するgenerate:plugin-moduleがあります。これらで生成したスケルトンには、テストコードの枠組みも最初からついてきます。