Я пытаюсь переопределить lithium\data\source\Http::read()
, выполнив Создание источников данных а>. Это результат моей проблемы в Как мне отправить POST для cURL в литии.
У меня сейчас что-то вроде этого:
<?php
namespace li3_tr42Auth\extensions\adapter\data\source\http;
class TR42 extends \lithium\data\source\Http {
protected $_classes = [
// unlike in the "Creating Data Sources" doc, I had to add the 'schema' key
// or I get an error when 'Libraries' tries to instantiate it.
'schema' => 'lithium\data\DocumentSchema',
'service' => 'lithium\net\http\Service',
'entity' => 'lithium\data\entity\Document',
'set' => 'lithium\data\collection\DocumentSet'
];
public function read($query, array $options = []) {
$params = $query->export($this, ['keys' => ['source', 'conditions']]);
$source = Inflector::camelize($params['source']);
$model = Libraries::locate('models', $source);
.
.
.
$decoded = $this->decode($response);
/** at this point, $decoded contains an associative array like:
* Array(
* [id] => 42,
* [name] => Housni,
* [status] => 1,
* [country] => Colombo, Sri Lanka
* )
*/
return $model::create($decoded, ['exists' => true]);
}
}
?>
Если я не использую item()
, любой поисковик вернет массив как есть. Если я использую item()
, я получаю только первое значение массива, которое в данном случае будет 42
.
Любая идея, что я делаю неправильно здесь?
ОБНОВЛЕНИЕ Оказывается, только find('first')
вызывает указанную выше проблему. Использование find('all')
возвращает объект, как и ожидалось. Не совсем уверен, как это исправить.
ОБНОВЛЕНИЕ № 2 Я обновил приведенный выше код read()
новым кодом возврата. Если я покажу результаты перед возвратом из read()
, я увижу правильный объект Document
. Похоже, что-то происходит в методе find()
. Кстати, я не запускаю никаких фильтров для модели. Любая идея, как я могу отладить это?