PSR-0 という規約

通院のため朝からいけなかったPHPMatsuriですが、その日の午前中のTwitter TLに流れてきた「PSR-0」という単語が気になったので調べてみると以下のようなページがありました。

PHP Standards Working Group:PSR-0 Final Proposal

このページを見てもらえれば一目瞭然ですが、PHP5.3で導入されたnamespaceに関して、それを使用したクラスをこのような規約で配置しようというものですね。

例を見るととてもわかりやすいものになってます。

  • \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
  • \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
  • \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
  • \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

こういう規約がメンバー25名のPHP Standards Working Groupっていうgoogleグループ(PHPMatsuriで来日したLithiumのNateも参加してるみたい)で話し合われていたってことを知ってた日本人っているのかな?

とりあえずPHPMatsuriで聞いていた人たちの反応を見る限りではこのグループもこのPSR-0という規約も知ってる人はいない感じ。ということはみんながみている場所(ML等)ではこの話題はでてなかったってことかなぁ?(この議論が活発になっている昨年末は雲隠れしていた期間だからよくわからないんだよなぁ・・・)

けど、このような規約がしっかり浸透すればフレームワークを作る側からするとほんと楽になる。まぁ昔からのPEARZend Frameworkの規約もわかりやすいけど、このPSR-0はさらに明快。日本でもフレームワークを作っている人は結構いるのでPHP5.3以降のフレームワークはこの規約に則るべきですね。

うーむ。PHPMatsuriの午前中のセッションでNateがこれについてどういう話をしていたか、聞きたかったなぁ・・・

追記
id:hnw さんが上記URLの和訳をされてます。 → hnwの日記:PSR-0 を和訳してみた

ちなみに・・・

PHPMatsuriで断念したアプリは以下のような仕様だったんですよね・・・

  • 入力画面毎にactionを準備するんではなく、入力画面は1つのactionでうけて、たとえばform→confirm→add のように3つのアクションだけで処理する
  • 管理画面で自由に画面数を決めて、入力項目も各画面に自由に配置する
  • 入力画面のstepの切り替えはGETのパラメータで行う

で、なんで実現できないかというとセッションのキーがアクション名だから。まぁがんばって拡張すれば、キーをuriにしたりできたんだろうけど、気がついたのが朝の6時だったから(管理ツールを先に作ったためにこの部分が判明したのが最後の最後だった・・・)心が折れちゃったんですよね・・・

まぁ、そこでコードをしっかり読んだのでこんな記事が書けたんですけどね。まぁ、よしとしよう。

Transitionコンポーネント - さらに込み入った使い方

というわけでTransitionコンポーネントを便利に使わせてもらっているのですが、このコンポーネントはその性格上以下のような制約があります。

- アクションごとにバリデーションを行う場合はそれごとにモデルが必要になる

画面ごとにきっちりとモデルが割り当てれればいいのですが、1つのモデルのフィールドが複数の画面にちらばるとか、全画面の項目を1つのモデルに割り当てたいとかいろいろな事情があると思います。

続きを読む

Transitionコンポーネント - checkPrev() について

最初に書いたサンプルでは完了画面に出てきた Transition#checkPrev だけど、この説明をした方が Transition#automate はわかりやすくなるのでこっちを先に。

Transition#checkPrev は引数に指定したアクションからちゃんときているかをチェックします。どうやってチェックしてるかは Transition コンポーネントが管理しているセッションのデータ構造をみた方がわかりやすいと思います。データ構造は以下のような形になってます。

続きを読む