根据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条记录。
答案 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();