[CakePHP]read-onlyなモデルを作る

アプリを作っていると、複数のDBを使い分けたり、master-slave構成だったりすることは良くありますよね。そういったDB構成の場合、心配なのはread-onlyなテーブルに間違って更新をかけてしまわないかということです。

そこで、とっても簡易ですが、更新してしまわないようにする予防策をしておきます。read-onlyなモデルは、下記AppReadOnlyModelを継承するだけで安心できます(更新系処理のコールバック関数って以下の関数くらいでいいんですよね?)。CakePHP 1.3.7で試しています。

[phpcode]
class AppReadOnlyModel extends AppModel
{
function _read_only_error()
{
trigger_error(sprintf(‘Cannot execute write query to %s:%s.’, $this->useDbConfig, $this->name), E_USER_WARNING);
}

/**
* save (WRITE系クエリを無効化する)
*
* @access public
*/
final function save()
{
$this->_read_only_error();
return false;
}

/**
* saveAll (WRITE系クエリを無効化する)
*
* @access public
*/
final function saveAll()
{
$this->_read_only_error();
return false;
}

/**
* saveField (WRITE系クエリを無効化する)
*
* @access public
*/
final function saveField()
{
$this->_read_only_error();
return false;
}

/**
* updateAll (WRITE系クエリを無効化する)
*
* @access public
*/
final function updateAll()
{
$this->_read_only_error();
return false;
}

/**
* delete (WRITE系クエリを無効化する)
*
* @access public
*/
final function delete()
{
$this->_read_only_error();
return false;
}

/**
* deleteAll (WRITE系クエリを無効化する)
*
* @access public
*/
final function deleteAll()
{
$this->_read_only_error();
return false;
}
}
[/phpcode]

php4系ならばfinalキーワードを外してください。

About: uechoco