素人の投稿なので間違っていたら教えてください。
やりたいこと
wget http://xxx/api/apples.json
{
"apples": [
"Apple",
"Ringo"
]
}
…を出来る限り短いコード量で作りたい。
CakePHPの流儀に従ったら短くなるはずだ。
Note
いやいや、以下を返すべきだろ、などなどは本質的ではないので目をつぶってね。
["Apple", "Ringo"]
routes.php
Router::extensions(['json']);
Router::scope('/api', function ($routes) {
$routes->resources('Apples');
});
resourcesはREST APIのインタフェースを作ってくれる。
今回の場合は index
のみ許可すべきですが、本質的ではないので省略。
controller
namespace AppController;
use CakeControllerController;
class ApplesController extends Controller
{
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler');
}
public function index($mode = null) {
$this->viewBuilder()->setClassName('Json'); // .jsonなしでもOKにする
$apples = ["Apple", "Ringo"];
$this->set([
'apples' => $apples,
'_serialize' => ['apples']
]);
}
}
Note
- コントローラの置き場を
Controller/Api/ApplesController
にしたい - コントローラのnamespaceを
namespace AppControllerApi;
にしたい
…というのはCakePHPの世界では邪道なようだ。
公式ドキュメントの通りに実装するとコントローラは Controller
の直下を探しに行くので、CakePHPではroutesでゴニョゴニョしたくなかったら、Controller直下に置け、ということのようですかね。
[紹介元] PHPタグが付けられた新着投稿 – Qiita エンジニアっぽい資格試験リスト①
コメント
記事に戻る