我试图lithium\data\source\Http::read()
通过遵循创建数据源来覆盖。这是我在How do I submit POST for cURL in Lithium中的问题的结果。
我现在有这样的事情:
<?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()
,任何 finder 都会按原样返回数组。如果我确实使用,在这种情况下item()
,我只会得到数组的第一个值。42
知道我在这里做错了什么吗?
更新
事实证明,只有 afind('first')
会导致上述问题。find('all')
正如预期的那样,使用返回一个对象。不太清楚如何解决这个问题。
更新#2
我read()
用新的返回码更新了上面的代码。如果我在从返回之前显示结果read()
,我会看到一个正确的Document
对象。看起来find()
方法中发生了一些事情。顺便说一句,我没有为模型运行任何过滤器。知道如何调试吗?