CakePHPでJSONを吐き出すページを作る。正規版
前のは失敗でした
その1で作ったJSON用のページは間違ってました。m(__)m申し訳ないです。以下はJSONを表示するページの作り直しです。
ちなみに今回のも完成ではありません。注意して下さい。
表示するURLを決める
CakePHPのお作法的にどういったURLが正しいか分かりませんが、以下の様にきめました。
http://sample.com/api/hogeUsers/get/user_list
Configure::write('Routing.prefixes', array('admin','api'));
ルーターの設定
CakePHP2.xではJSON用のビューを使うための設定が必要らしいです。 設定その1。/app/Config/routes.phpの最後に以下を追加します。
Router::parseExtensions('json');
コントローラの作成
/app/controller/HogeUsersController.phpを作ります。
App::uses('AppController', 'Controller'); class HogeUsersController extends AppController { … public $layout = "common"; /** * コンポーネントの設定 */ public $components = array('ApiTool','RequestHandler'); public function index() { } public function api_get($type = null){ // リクエストをデバッグログに書き出し $this->ApiTool->logingRequest($this->request); // 引数チェック。空か、指定タイプ以外だったら404エラー $this->ApiTool->checkType($type,array('user_list')); // タイプごとにmodelsを作り分ける。 if ($type == 'user_list'){ $models = array( array('name'=>'yamada','id'=>115), array('name'=>'kitamura','id'=>116), array('name'=>'matsumoto','id'=>117), ); $this->set('models',$models); } // ビュークラスをJSONにする $this->viewClass = 'Json'; $this->set('_serialize', array('models')); } public function beforeFilter() { parent::beforeFilter(); $this->set('title_for_layout','HogeUsers'); } }
自作したコンポーネント「ApiTool」も設定してます。
「api_get」アクションを作って中身を書いていきます。「$this->viewClass = 'Json';」の部分でJSON用のビューを設定しているようです。最後のシリアライズ「$this->set('_serialize', array('models'));」も忘れないようにしましょう。
自作コンポーネント「ApiTool」
同じ処理を色々な箇所で書きそうだったのでコンポーネントを自作しました。 /app/Controller/Component/ApiToolComponent.php
App::uses('Component', 'Controller'); class ApiToolComponent extends Component { // リクエストの内容をログに書き出す。 public function logingRequest($request = null){ if (empty($request)) return; $this->log($request->params, 'debug'); $this->log($request->data, 'debug'); $this->log($request->query, 'debug'); } // 引数チェック。空か、$types以外だったら404エラー public function checkType($type,$types=array()){ if (empty($type) || empty($types)) throw new NotFoundException('このページはありません。'); if (empty($type) || !in_array($type,$types)){ throw new NotFoundException('このページはありません。'); } } }
JSON用のページにアクセスしてみる
これでJSONが吐出されるのでブラウザで「http://sample.com/api/hogeUsers/get/user_list」にアクセスしてみます。 以下が表示されました。
{"models":[{"name":"yamada","id":115},{"name":"kitamura","id":116},{"name":"matsumoto","id":117}]}
しかしこれでは上手く行きません。続きは次回です。
環境とか
項目 | 内容 |
---|---|
PHPフレームワーク | Cakephp 2.2.5 |
CSSフレームワーク | Twitter bootstrap 2.2.2 |
IDE | Eclipse 3.6 |
開発環境? | MAMP |
PC | iMac |
OS | Mac OS Lion |
0 件のコメント:
コメントを投稿