FuelPHPでRestコントローラ(WebAPI)を作成するタスクを作成しました。
- ↓のrest.phpを
fuel/app/tasks/
の中に置く - タスクを実行するコマンド(
php oil r rest [name]
)を叩く
rest [name] (--format) (--prefix=api) (<optionalMethod:http>...)
生成されるファイル名を小文字の単数形で指定する
このnameがコントローラ名になり、内部で扱うモデル名になり、追加されるルーティングの名前になります。
モデルはModel_Crud
もしくは\Orm\Model
を継承したものを想定しています。
デフォルトフォーマットを指定する
省略した場合にはデフォルトフォーマットの指定は行われません。
コントローラを配置する配置するディレクトリを指定する
指定すれば、生成されるディレクトリと生成されるクラス名も変更されるが、このオプションを空にすることは出来ない。
(できるけど現在の実装上コントローラ名や諸々がController__Hoge
)みたいになるので動きません)
更に追加で実装したいメソッドを、メソッド名:受け付けるHTTPメソッド
形式で列挙する。
このオプションで生成されるのは、メソッドを定義した空のメソッドです。
- モデルの全件(1件)取得
- モデルの作成
- モデルの更新
- モデルの削除
のべーシックなコードはデフォルトで生成されます。
また、fuel/app/config/routes.php
に追記を行います。
oil r rest letter show:get update:put create:post --format=json
とコマンドを実行した際に生成されるコードが以下のようになっています。
'api/letter/(:num)' => 'api/letter/index/$1',
<?php
/**
* Generated rest controller
*
* Auto generated methods:
* GET /api/letter(/:id) => get_index($id = 'all')
* POST /api/letter => post_index()
* PUT /api/letter/:id => put_index($id)
* DELETE /api/letter/:id => delete_index($id)
*
* User defined methods:
* GET /api/letter/show => get_show()
* PUT /api/letter/update => put_update()
* POST /api/letter/create => post_create()
*/
class Controller_Api_Letter extends Controller_Rest
{
// default format
protected $format = 'json';
/**
* GET /api/letter(/:id)
* @param number $id (optional) default is 'all'
*/
public function get_index($id = 'all')
{
$letters = Model_Letter::find($id);
return $this->response($letters);
}
/**
* POST /api/letter
*/
public function post_index()
{
$letter = Model_Letter::forge(Input::post());
$letter->save();
return $this->response($letter, 201); // created
}
/**
* PUT /api/letter/:id
* @param number $id
*/
public function put_index($id)
{
$letter = Model_Letter::find($id);
$letter->set(Input::put());
$letter->save();
return $this->response($letter);
}
/**
* DELETE /api/letter/:id
* @param number $id
*/
public function delete_index($id)
{
$letter = Model_Letter::find($id);
$letter->delete();
return $this->response(array(), 204); // no content
}
/**
* GET /api/letter/show
*/
public function get_show()
{
}
/**
* PUT /api/letter/update
*/
public function put_update()
{
}
/**
* POST /api/letter/create
*/
public function post_create()
{
}
}