Phalcon 1.2.4 (PHP Framwork)::APIスケルトン
Phalcon
Phalcon Frameworkを利用してAPIを実装したときのスケルトンを紹介します。
本家ドキュメントでは、
http://docs.phalconphp.com/en/latest/reference/micro.html
を参考にしました。
ディレクトリ・ファイル構成
基本構成は、Phalcon Developer Toolsを使用して作成しました。
phalcon-micro │ .htaccess │ app.php │ ├─.phalcon ├─app │ ├─collections │ │ UserCollection.php │ │ │ ├─config │ │ config.php │ │ loader.php │ │ services.php │ │ │ ├─controllers │ │ ControllerBase.php │ │ UserController.php │ │ │ ├─models │ └─views │ ├─logs │ └─public │ .htaccess │ index.php │ ├─css ├─files ├─img └─js
API用に追加した部分
コントローラー
Developer Toolsで作成すると、MVしかない。コレクション
http://docs.phalconphp.com/en/latest/reference/micro.html#using-controllers-as-handlers
サンプルソース
app.php
※ルーターの役割
<?php //APIのバージョン $version = "1.0"; //未定義のパスにアクセスした場合に実行される $app->notFound(array(new ControllerBase(), "notFoundAction")); //コレクションのインクルード include __DIR__ . '/app/collections/UserCollection.php';
UserCollection.php
<?php use Phalcon\Mvc\Micro\Collection as MicroCollection; $userCollection = new MicroCollection(); //メインコントローラー $userCollection->setHandler(new UserController()); //コレクション内での共通prefix $userCollection->setPrefix("/{$version}/user"); /** * ユーザー情報取得 * * http://api.sample.com/1.0/user/ * に対して * GETでアクセスすると * UserControllerのgetUserメソッドが実行される */ $userCollection->get("/", "getUser"); /** * ユーザー登録 * * http://api.sample.com/1.0/user/register/ * に対して * POSTでアクセスすると * UserControllerのpostUserメソッドが実行される */ $userCollection->post("/register", "postUser"); $app->mount($userCollection);
UserController.php
<?php class UserController extends ControllerBase { public function getUser() { } public function postUser() { } }
ControllerBase.php
※全てのコントローラーのベース
<?php use Phalcon\Mvc\Controller; class ControllerBase extends Controller { /** * * @param int $code * @param array $content */ protected function output($code, $content=array()) { //Header $this->response->setContentType('application/json') ->setStatusCode($code, null) ->sendHeaders(); //Body $this->response->setJsonContent($content) ->send(); } public function notFoundAction() { $this->output(404); } }