如何解决CakePHP如何从API JSON数据源创建分页
我有一个类似example的API
我已使用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 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。