【问题标题】:How to send Yii2 RESTful GET request and specify sorting as params如何发送 Yii2 RESTful GET 请求并将排序指定为参数
【发布时间】:2016-07-25 14:40:42
【问题描述】:

我想向v1/users 端点发送GET 请求,其中我想指定我想通过priority DESCstatus ASC 进行排序。

如您所见,我想发送将映射到 SQL WHERE 部分的参数:

SELECT * FROM table WHERE something ORDER BY priority DESC, status ASC

我应该如何在我的 HTTP 请求中指定我想要这种排序的参数?我认为为了做到这一点,我需要在 POST 请求中发送 JSON 数据。但这是一个问题,因为我想要 GET 请求而不是 POST。 post/users表示创建用户,我要get用户。

我想我必须像这样发送 JSON 对象

"sort":[ {"priority":"DESC", "status":"ASC"} ]

首先,发送 GET 请求时是否可以发送这样的参数?
其次,您将如何在 PHP 中使用 cUrl 发送这些参数?

【问题讨论】:

  • 将参数添加到 GET 请求 v1/users?priority=desc&status=asc

标签: php json rest sorting yii2


【解决方案1】:

借助内置的 RESTfull API,您可以使用逗号进行多属性排序,使用“-”符号表示 DESC:

GET v1/users?sort=-priority,status

如果使用自定义操作而不是内置操作。请务必始终返回 data provider 实例,以便 serializer 可以生成相关的分页,并且支持上述参数:

// instead of: return $modelClass::find()->all();
return new ActiveDataProvider([
    'query' => $modelClass::find(),
]);

【讨论】:

  • 您知道如何按相关表格列排序吗?我有个人资料文件,它是个人资料表的个人资料关系。 public function fields() { $fields = parent::fields(); $fields[] = 'profile'; return $fields; } 。所以我想按 profile.created_at 排序。你知道吗?
  • 在这种情况下,我认为您需要覆盖$actions['index']['prepareDataProvider'] 并通过$dataProvider->sort->attributes['profile'] = [..] 将排序添加到自定义ActiveDataProvider 实例,然后再返回它,就像在this example 中完成的那样。跨度>
  • 我个人使用搜索类。这是我进行过滤和排序的地方。这是另一个example 关于如何自定义搜索类的内容。这是how I use it in REST
  • 我在这里提出了全新的问题:stackoverflow.com/questions/36474282/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多