ReST DataSource plugin for CakePHPを使う

ReST DataSource plugin for CakePHPCakePHP 1.3から追加された、プラグインによるデータソース定義機能で使ってみた。

pluginの準備

プラグインディレクトリ(APP/plugins/rest)を作成し、githubからプラグインのソースを落としてきて、rest_source.phpをAPP/plugins/rest/models/datasourcesに配置。
プラグインのAppController, AppModelは定義しなくても動く。

データソースの定義

ポイントは'Rest.RestSource'と定義すること。最後のSourceが抜けていて半日悩んだ。作者の人のブログ記事にコメントを残しておいたが英語が通じるかどうかは非常に不安だ。

<?php
// APP/config/database.php
class DATABASE_CONFIG {
	// $default, $testは普通にMySQL等で定義
	var $rest = array(
		'datasource' => 'Rest.RestSource',
	);
}

Modelから呼んでみる

$useDbConfigでデータソースをRESTプラグインに切り替えている。

<?php
// APP/models/twitter_user_timeline.php
class TwitterUserTimeline extends AppModel {
	var $name = 'TwitterUserTimeline';
	var $useTable = false;
	var $useDbConfig = 'rest';

	function findById($value = null) {
		$this->request = array(
			'uri' => array(
				'host' => 'twitter.com',
				'path' => 'statuses/user_timeline/'.$value.'.json',
			),
		);
		return parent::find('all', array());
	}
}

Controllerから呼んでみる

<?php
// APP/controllers/timeline_controller.php
class TimelineController extends AppController {
	var $uses = array('TwitterUserTimeline');

	function view($id) {
		$tl = $this->TwitterUserTimeline->findById($id);
		...
	}
}