如何更改默认Yii 2 Rest API GET响应结果

时间:2016-05-12 16:56:26

标签: php rest yii

根据Yii 2 Rest APi文档,我有CountriesCountry扩展\yii\rest\ActiveController和相应的Countries model。这是我的Controller类的代码。

<?php

namespace app\controllers;

class CountriesController extends \yii\rest\ActiveController{

public $modelClass = 'app\models\Countries';

public function actionIndex(){

}

public function actionView(){

}

public function actionCreate(){

}

public function actionUpdate(){

}

public function actionDelete(){

}

public function actionOptions(){

}

}

当我发送get请求时,它会返回我数据库中的所有国家/地区。

我的问题

是否可以从动作方法返回我自己的结果。与actionIndex()中一样,我想将结果限制为20条记录。我做了类似的事情,但是没有用。

 public function actionIndex(){

    $model = Countries::find()->limit(20);
    print_r($model);
}

我知道我可以通过数据库获取所有国家/地区并循环访问它并获得20个结果,但我想从数据库中查询20条记录。

3 个答案:

答案 0 :(得分:0)

假设您的api链接是:

http://localhost/yii2-rest/api/country/?limit=15&order=id

控制器:

 public function actionIndex(){
       $model = Countries::find()           
        ->orderBy($_GET['order'])
        ->limit($_GET['limit'])
        ->all();    
       return $model;
     }

注意安全!

您可以通过以下方式获取查询字符串:

$limit = Yii::app()->getRequest()->getQuery('limit');

答案 1 :(得分:0)

从\ yii \ rest \ ActiveController扩展的类CountriesController自动支持GET,PUT,POST调用等。如果你只想要常规的REST功能,则不需要actionIndex(),actionCreate()等。在Yii2 guide中了解相关信息。

要限制结果,您可以在afterAction-method之后在控制器中设置另一个页面大小。将其添加到您的控制器。 (我相信20个记录是Pagination类的默认值,所以如果这是你想要的,你根本就不需要这个代码。只需使用yii / rest / ActiveController的默认功能。)

public function afterAction($action, $result) {
    if (isset($result->pagination) && ($result->pagination !== false)) {
        $result->pagination->setPageSize(100);
    }
    return parent::afterAction($action, $result);
}

答案 2 :(得分:-3)

<强>直道

//SELECT * FROM countries LIMIT 20
$countries= Countries::find()->limit(20)->all();