Я создал простой datasource
:
// app/Model/Datasource/FeedSource.php App::uses('DataSource', 'Model/Datasource'); class FeedSource extends DataSource { public function abcd() { echo 'Hello World!'; } }
в моей database.php
:
public $feed = array( 'datasource' => 'FeedSource' );
И в модели Feeda
:
class Feeda extends AppModel { public $useTable = false; public $useDbConfig = 'feed'; }
в контроллере list
:
$this->loadModel('Feeda'); $this->Feeda->abcd();
Но он возвращает фатальную ошибку:
Error: Call to undefined method FeedSource::query()
Как его решить?
Благодаря…
Возможно, вы использовали DboSource
вместо DataSource
.
У DataSource нет запроса метода, DboSource делает. Обновите свой код, чтобы он выглядел так:
App::uses('DboSource', 'Model/Datasource'); class FeedSource extends DboSource {}
Edit: Похоже, это не проблема. В Model
есть волшебный метод __call, который вызывает $this->getDataSource()->query($method, $params, $this);
Источник. Вам нужно реализовать это самостоятельно.
class FeedSource extends DataSource { public function abcd() { echo 'Hello World!'; } public function query($method, $params, $Model) { // you may customize this to your needs. if (method_exists($this, $method)) { return call_user_func_array(array($this, $method), $params); } } }