问题描述
我已使用CakePHP HTTP客户端获取数据,低于我尝试的代码
public index()
{
$http = new Client();
$response = $http->get('https://restcountries.eu/rest/v2/all');
// $json = $response->getJson(); //also tried usgin json
$countries = $this->paginate($response);
$this->set(compact('countries '));
}
我正在尝试对该国家/地区数据应用分页,然后将其与分页一起获取。 经过上面的代码尝试,我得到了下面的错误
传递给Cake \ Datasource \ Paginator :: extractData()的参数1必须是Cake \ Datasource \ RepositoryInterface的实例,是指定的Cake \ Http \ Client \ Response的实例,在\ myapp \ vendor \ cakePHP中调用第176行上的\ cakePHP \ src \ Datasource \ Paginator.PHP
我如何得到我想要的结果?
解决方法
您可能需要实现一个扩展RepositoryInterface的类。
class JsonSource implements Cake\Datasource\RepositoryInterface
{ ... }
public index() {
$http = new Client();
$response = $http->get('https://restcountries.eu/rest/v2/all');
$src = new JsonSource();
$src->fromResponse($response);
$countries = $this->paginate($src);
$this->set(compact('countries ')); }
有点乏味,因为您需要像数据源一样定义Json。
,默认分页仅支持查询表(存储库)或对预构建的查询实例进行操作。
要在 @Zeppi's answer 上扩展。基本上,这里有三个简单的选项:
-
创建@Zeppi提示的自定义查询/存储库实现。
这确实可以做很多工作,因此您可能希望研究借助插件的替代实现,例如 muffin/webservice ,它可以完成大多数实施所需接口的艰苦工作。
-
或创建一个实际上接受并处理数组数据的custom paginator。
-
或使用广为人知的“数据表”,即在前端中用于分页数据的基于JavaScript的表,例如 jQuery DataTables 。