フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

エンジニアっぽい資格試験リスト①

素人の投稿なので間違っていたら教えてください。

やりたいこと

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 エンジニアっぽい資格試験リスト①

コメント

記事に戻る

コメントを残す