I am using this doc as a reference: http://book.cakephp.org/2.0/en/models/datasources.html
It says that I must do the following which I did so I am confused by the results. Methods that must be implemented describe($model) listSources() At least one of: create($model, $fields = array(), $values = array()) read($model, $queryData = array()) update($model, $fields = array(), $values = array()) delete($model, $id = null) On Nov 16, 9:29 am, RhythmicDevil <rhythmicde...@gmail.com> wrote: > For reference here is my Datasource file. > > <?php > > App::uses('HttpSocket', 'Network/Http'); > > class GtiSource extends DataSource > { > > /** > * The description of this data source > * > * @var string > */ > public $description = 'Datasource to interact with the GTI API'; > > /** > * Instance of CakePHP core HttpSocket class > * > * @var HttpSocket > */ > public $Http = null; > > /** > * A URL encoded JSON string > * @var String > */ > public $queryString; > public $queryData; > > /** > * Loads HttpSocket class > * > * @param array $config > * @param HttpSocket $Http > */ > public function __construct($config, $Http = null) > { > parent::__construct($config); > if (!$Http) > { > $Http = new HttpSocket(); > } > $this->Http = $Http; > } > > public function describe($model) > { > return $this->description; > } > > public function listSources() > { > } > > /** > * > * @param AppModel $model > * @param array $queryData > */ > public function create(&$model, $fields = array(), $values = > array()) > { > // Set the mode @TODO is this the right mode? > $queryData['fields']['mode'] = 'insert'; > exit('DONT KNOW HOW TO CREATE A RECORD'); > return $this->request(); > } > > /** > * > * @param AppModel $model > * @param array $queryData > */ > public function read(&$model, $queryData = array()) > { > // Set the mode > $queryData['fields']['mode'] = 'read'; > $this->queryData = $queryData; > $this->model = $model; > > return $this->request(); > } > > /** > * > * @param AppModel $model > * @param array $queryData > */ > public function update(&$model, $fields = array(), $values = > array()) > { > // Set the mode @TODO is this the right mode? > $queryData['fields']['mode'] = 'update'; > > exit('DONT KNOW HOW TO UPDATE A RECORD'); > return $this->request(); > } > > /** > * > * @param AppModel $model > * @param array $queryData > */ > public function delete(&$model, $id = null) > { > var_dump(__METHOD__); > // Deleting not allowed in the GTI API > $data = array(); > // Decode the data and cast the beeatch to an Array > $data[$this->model->name] = array('Deleting is not allowed > through the GTI API'); > return $data; > } > > /** > * Does the actual request. Creates the URI from the DB config > vars and the > * user paramters if any. > * > * @param CakeModel $model > * @return boolean > */ > public function request() > { > /* > * The GTI API requires a key. This is set in the dbConfig > */ > if (empty($this->config['key'])) > { > return false; // @TODO throw exception instead. > } > $this->queryData['fields']['key'] = $this->config['key']; > > /* > * If the request has not specified a mode then the default is > "read" > */ > if (empty($this->queryData['fields']['mode'])) > { > $this->queryData['fields']['mode'] = 'read'; > } > > /* > * If the request has not specified a cache setting then use > the default > * from dbConfig > */ > if (empty($this->queryData['fields']['cache'])) > { > $this->queryData['fields']['cache'] = $this->config['cache']; > > } > > /** > * Create the full URI include the query string because I dont > know how > * to get Cake's HttpSocket to accept it any other way. This > works for now > * but should be reviewed at some point. > */ > $uri = $this->config['url'] . ':' . $this->config['port'] . > '/' . urlencode(json_encode($this->queryData['fields'])); > /** > * New Socket > */ > $HttpSocket = new HttpSocket(); > /* > * Get the results > */ > $results = $HttpSocket->get($uri); > /** > * If the returned HTTP status code is anything other than 200 > then > * something went wrong. > */ > if ($results->code == '200') > { > $data = array(); > // Decode the data and cast the beeatch to an Array > $data[$this->model->name] = (Array) > json_decode($results['body']); > return $data; > } > else > { > // @TODO Where is error data supposed to go in the Model? > $model->data = json_decode($results); > return false; > } > } > > public function calculate(&$model, $func, $params = array()) > { > //var_dump(__METHOD__); > //var_dump($model, $func, $params); > return 1; > } > > } > > ?> > > On Nov 16, 9:24 am, RhythmicDevil <rhythmicde...@gmail.com> wrote: > > > > > > > > > I am writing a custom datasource. I was implementing the delete action > > in the datasource and ran into a problem. I expected that when I call > > Model::delete($id, false); it would execute the Datasource::delete() > > method. But that does not happen. First a method called calculate() is > > executed and then Datasource::read() is executed. I dont know why. > > > 1. So why does the calculate() method get called and how do I prevent > > that as it makes no sense my implementation. > > > 2. Why does the read() method get called before delete() and how do I > > prevent that? > > > 3. Is there a document somewhere that lists the methods called in > > order of execution for CRUD operations? -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php