2016-03-30 4 views
1

Wie docs sagen: [[yii\rest\IndexAction|index]]: list resources page by pageYii2: Wie Komponente Standard in ActiveController Aktion verwenden

Antwort hat Ansicht:

curl -i -H "Accept:application/json" "http://192.168.100.5/index.php/tweets" 
HTTP/1.1 200 OK 
Date: Wed, 30 Mar 2016 12:10:07 GMT 
Server: Apache/2.4.7 (Ubuntu) 
X-Powered-By: PHP/5.5.9-1ubuntu4.14 
X-Pagination-Total-Count: 450 
X-Pagination-Page-Count: 23 
X-Pagination-Current-Page: 1 
X-Pagination-Per-Page: 20 
Link: <http://192.168.100.5/tweets?page=1>; rel=self, <http://192.168.100.5/tweets?page=2>; rel=next, <http://192.168.100.5/tweets?page=23>; rel=last 
Content-Length: 4305 
Content-Type: application/json; charset=UTF-8 

[{"id":71,"text":"Juíza do RS Graziela Bünd....... 

Ich habe Komponente, die eine Rückkehr - einige Array (Auswahl aus zwei Tabellen). Wenn ich indexAction anpassen.

public function actions() 
    { 
     $actions = parent::actions(); 
     unset($actions['update']); 
     unset($actions['delete']); 
     unset($actions['view']); 
     unset($actions['index']); 

     return $actions; 
    } 

    public function actionIndex($count = 10) 
    { 
     /** @var TweetLastfinder $tweetLastFinder */ 
     $tweetLastFinder = Yii::$app->get('tweetlastfinder'); 

     return $tweetLastFinder->findLastTweets($count); 
    } 

Antwort richtig Inhalt haben, sondern hat Ansicht:

curl -i -H "Accept:application/json" "http://192.168.100.5/index.php/tweets" 
HTTP/1.1 200 OK 
Date: Wed, 30 Mar 2016 12:15:36 GMT 
Server: Apache/2.4.7 (Ubuntu) 
X-Powered-By: PHP/5.5.9-1ubuntu4.14 
Content-Length: 2282 
Content-Type: application/json; charset=UTF-8 

[{"id":605,"text":"Popular Mus...... 

In diesem Fall i $serializer verwenden kann nicht, zeigen _meta etc

I Seite Antwort von Komponente und Liste Ressourcen Seite verwenden möchten wie es Standardaktion tut. Wie sollte es richtig gemacht werden?

Antwort

1

Um eine volle Nutzung der in yii\rest\Serializer gebaut zu bekommen und zeigen _meta oder Ihre Urls aussehen:

/tweets?page=5&per-page=12&sort=name 

Ihre Aktion sollte ein data provider Objekt zurück, das die DataProviderInterface implementiert, welche alle diejenigen sein können:

es hängt also alles ab, welche Art von Objekt $tweetLastFinder->findLastTweets() zurückkehrt. Wenn die findLastTweets Methode zurückgibt ein ActiveQuery Objekt wie:

public function findLastTweets($count) 
{ 
    ... 
    return $Tweets::find(); 
} 

Dann legt ihn nur in ein ActiveDataProvider Beispiel:

use yii\data\ActiveDataProvider; 

public function actionIndex($count = 10) 
{ 
    /** @var TweetLastfinder $tweetLastFinder */ 
    $tweetLastFinder = Yii::$app->get('tweetlastfinder'); 

    $tweets = $tweetLastFinder->findLastTweets(); 

    return new ActiveDataProvider([ 
     'query' => $tweets, 
    ]); 
} 

Wenn es eine Reihe von Daten oder etwas gibt man dann in ein Array umwandeln kann Setzen Sie es einfach in eine ArrayDataProvider Instanz. Wenn es sich um ein komplexeres Objekt handelt, müssen Sie einen benutzerdefinierten Datenanbieter erstellen, in den Sie ihn umbrechen können. Sehen Sie, wie das in verwandten docs zu tun.

+0

Hmm .. ich verstehe es nicht, warum in Standardaktion in der Lage, einfache URL zu verwenden? Ist die Aktion in Ihrer Antwort angepasst? Meinst du, ich muss den Index aufheben? – user199588

+0

Nein nicht URL nur ein direkter Aufruf an die Klasse ohne deklarieren seinen Namespace 'use \ yii \ data \ ActiveDataProvider' im oberen Teil der Datei. Ich werde ein Update machen, um es besser zu erklären. –

+0

aktualisiert. Beachten Sie, dass '$ count' hier keinen Sinn ergibt, da der Serializer von dort aus Daten filtert und begrenzt. Sie müssen nur "& per-page = xx" in Ihrer Anfrage festlegen. –

Verwandte Themen