Cakephp 2.3.8 を使用して、別のデータソース内で作成したカスタム カウチベース データソースへの接続をセットアップしようとしています。モデルを介してロードされているときに、サイトの残りの部分で適切に機能をロードしようとしているデータソース。接続マネージャーを使用してこのデータソースをロードしたいと考えています。これは私がこれまでに持っているものです:
database.php ファイル:
public $queriesCB = array(
'datasource' => 'CouchbaseSource',
'username' => 'queries',
'password' => '',
'bucket' => 'queries',
'prefix' => 'q_',
'expiry' => '1814400', //3 Weeks
'autoConnect' => true,
'database' => NULL ,
'persistent' => false
);
他のデータソース内でcouchbaseデータソースをロードしようとしています
$db = ConnectionManager::getDataSource("queriesCB");
$db をデバッグすると、次のようになります。
object(CouchbaseSource) {
description => 'Couchbase DataSource'
conObject => object(Couchbase) {
[private] _handle => resource
}
config => array(
'password' => '*****',
'database' => '*****',
'prefix' => '*****',
'datasource' => 'CouchbaseSource',
'username' => 'queries',
'bucket' => 'queries',
'expiry' => '1814400',
'autoConnect' => true,
'persistent' => false
)
prefix => 'q__'
connected => false
cacheSources => true
configKeyName => 'queriesCB'
[protected] _baseConfig => array()
[protected] _descriptions => array()
[protected] _sources => null
[protected] _transactionStarted => false
}
これを呼び出そうとすると、エラーが発生します。
$db = ConnectionManager::getDataSource("queriesCB");
$db->Get('test');
エラー: 未定義のメソッド CouchbaseSource::Get() を呼び出します。
これはカスタム メソッドです。データソースはすべて、couchbase で最適に動作するようにカスタム化されており、Get メソッドは適切に機能します。Cakephpでこの接続を間違って設定するにはどうすればよいですか?
編集:
mysql データベースへのデフォルトのデータベース構成でテストしましたが、同様に失敗します。ここでの質問は、新しいデータソースを初期化する最良の方法は何でしょうか? そのデータソースがアタッチされたモデルをロードする必要がありますか? 例: データソースがカウチベースのカウチベース モデルがありますか?
編集:これはデータソースの一部です
class CouchbaseSource extends DataSource {
public $description = 'Couchbase DataSource';
public $conObject = NULL;
public $config = NULL;
public $prefix = NULL;
public function __construct($config = array()){
// If no configuration is set we use the default
$this->config = $config;
// Setup the cache string that is used when building the string
$this->prefix = (isset($this->config['prefix']) ? $this->config['prefix']."_" : "");
if ($this->config['autoConnect']) {
$this->connect();
}
}
public function connect() {
if ($this->conObject !== true) {
try {
$this->conObject = new Couchbase("127.0.0.1:8091", $this->config['username'], $this->config['password'], $this->config['bucket'], $this->config['persistent']);
} catch (Exception $e) {
throw new MissingConnectionException(array('class' => $e->getMessage()));
}
}
return $this->conObject;
}
public function query($method, $params, $object) {
// If not connected... reconnect!
if(!$this->conObject) {
$this->connect();
}
$apiMethod = $this->__methodToClass($method);
if (!method_exists($this, $apiMethod)) {
throw new NotFoundException("Class '{$apiMethod}' was not found");
} else {
return call_user_func_array(array($this, $apiMethod), $params);
}
}
private function __methodToClass($method) {
return 'CB' . strtolower(Inflector::camelize($method));
}
public function describe(&$Model) {
return $this->description;
}
/////////////////////////////////////////////////
// Query Methods
/////////////////////////////////////////////////
public function CBadd($key = NULL, $value = NULL, $expiry = NULL, $persisto = NULL, $replicateto = NULL) {
return $this->conObject->add($key, $value, $expiry, $persisto, $replicateto);
}