- summary blogチュートリアル(3) リソースの作成
- sidebar TableOfBlogTutorial
リソースはMVCでいうとモデルに当たる部分です。
リクエストに応じたメソッドが呼び出され結果がクライアントに返ります。リソースは独立していて、ページからだけでなくコマンドラインからも直接呼び出せます。(バッチでも利用できます)
リソース内ではリソースリクエストメソッドに応じたリソースリクエストインターフェイスを記述します。ここでいうインターフェイスはphpのinterfaceとは違います。例えばonReadメソッドを用意すればこのリソースにたいしてreadでアクセスすることができるようになります。メソッド内ではリソースに対する実リクエストを記述します。
Note:
このブログでは`BEAR_Query`クラスというBEARのDBクエリーツールを使ってSQLを扱っていますが、PDO関数やDoctorine等他のライブラリの選択は自由です。データソースに何を(MySQL/Mongo )選択するか、その操作にどのライブラリ(`BEAR_Query`, PDO, `Zend_Db`, Doctorine ORM/DAL...)を選択するのかはユーザーやアプリケーション要求に応じて選定します。
App/Ro/Post.php
Note:
BEARではどのクラスもコンストラクタの直後にonInject()が実行され、そのクラスが必要とする依存を整えます。(PHPUnitでのSetupメソッドのような働きをします)このクラスでは`BEAR_Query`サービスが`_query`プロパティにセットされます。これはDBオブジェクトを含んだSQLクエリーサービスオブジェクトです。
このリソースを利用してみましょう。 どこのディレクトリからでもかまいません、以下のコマンドを入力します。
以下のようなレスポンスが返ってくるはずです。
code, header, bodyとそれぞれの値が表示されました。 onRead内ではSQLクエリーで得られたarrayをreturnしているだけなのに、なぜこの3種類の情報が返って来ているのでしょうか?
例えば以下のPHPスクリプトがweb公開エリアに置いてある事を考えてみてください。
PHPでは文字列をechoしているだけですが、実際のHTTPレスポンスは
とcode(=200), header, body(=hello world)の3種の情報が返っています。これと同じように考えてみてください。つまりbody部分だけを返すとcodeにリクエストの結果コード、headerにはメタ情報が付加されたリソースオブジェクトが返ります。
コマンドラインではフォーマットの指定ができます。
※日本語で罫線が残念な事になってますが...
CSVもつくれます。
Note:
リソースはリソース状態(=リソースの本質的値)を持ちますがリソース表現を与えられクライアントに返されます。
* [resource] * [CLI] * [db] * [http://pear.php.net/manual/ja/package.database.mdb2.php PEARマニュアル MDB2]