2016-05-12 6 views
0

Yii 2 Rest APiのドキュメントによると、CountriesCountry\yii\rest\ActiveControllerに対応し、対応するCountries modelになります。これは私のControllerクラスのコードです。デフォルトYii 2 Rest APIを取得する方法

<?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件のレコードを照会します。

+1

[あなたはlimit()とoffset()を試していますか?](http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#limit-offset) ://stackoverflow.com/a/32156285/3585500)。 – ourmandave

+0

あなたのAPIリンクに制限を入れ、その制限をコントローラに入れ、$ models = Countries :: find() - > limit($ _ GET ['limit]); –

答えて

-3

ストレートウェイ

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

スコープはYii2で削除されました。 – topher

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; 
    } 

は、セキュリティについて注意してください!あなたはこのようクエリ文字列を取得することができます

:ActiveControllerは自動的に、GET PUTをサポートしています\ \ののYii \レストから延び

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

あなたのクラスCountriesControllerは、POST等actionIndex()、actionCreate(のための必要性無し呼び出します)など、通常のREST機能がほしいのならば。詳しくはYii2 guideをご覧ください。

結果を制限するには、コントローラのafterActionメソッドで別のページサイズを設定するだけです。コントローラーにこれを追加してください。 (私は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); 
} 
関連する問題