2014-12-11 4 views
13

Ich entwickle eine Anwendung mit AngularJS für das Frontend und Yii2 für das Backend.Yii2: Wie ändert sich die Paginierung pro Seite in RESTful Web Service API?

Das Frontend erfordert eine umfassende Auswahl aller Benutzer.

In der Dokumentation von Yii2, http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html kann ich das Ergebnis geteilt durch X-Paginierung-Per-Seite lesen: 20

Wie kann ich X-Paginierung-Per-Seite eingestellt: ALLE ??

+0

Dies ist eine alte Frage, aber meiner Meinung nach sollte das Back-End nicht alle Benutzer in einer Abfrage zurückgeben, die mit der Zeit sehr groß werden könnte. Stattdessen sollte Ihr Frontend alle Seiten (unter Verwendung der Link-Kopfzeile) durchlaufen, bis es das Ende erreicht hat und alle Ergebnisse verketten. –

Antwort

10

Siehe this Beispiel aus der offiziellen Dokumentation.

können Sie jede notwendige Zahl festgelegt, indem pageSize Parameter von pagination:

return new ActiveDataProvider([ 
    'pagination' => [ 
     'pageSize' => 10, 
    ], 
]); 

Oder Sie können pagination vollständig deaktivieren und alle verfügbaren Daten wie folgt zeigen:

return new ActiveDataProvider([ 
    'pagination' => false, 
]); 

Ich glaube nicht, Dies ist ein richtiger Weg, um ALL zu übergeben, weil es direkt von pageSize übernommen wird (was Nummer ist).

Bei Deaktivierung wird diese Kopfzeile nicht hinzugefügt.

10

Wenn Sie yii\rest\ActiveController als übergeordnetes Element von Ihrem Controller verwenden, müssen Sie den Aktionsindex in Ihrem Controller überschreiben.

Dies ist mein Code

class StnkController extends ActiveController{ 
    public $modelClass = "common\models\Stnk"; 

    public function actions(){ 
     $actions = parent::actions(); 
     unset($actions['index']); 
     return $actions; 
    } 

    public function actionIndex(){ 
     $activeData = new ActiveDataProvider([ 
      'query' => Stnk::find(), 
      'pagination' => [ 
       'defaultPageSize' => 2, 
      ], 
     ]); 
     return $activeData; 
    } 
} 
7

Here sagt, dass Sie alle Datensätze erhalten, wenn Sie setzen pagesize weniger als 1

Aber die pagesize in Bereich von pageSizeLimit sein muss . pageSizeLimit hat einen Standardwert [1, 50]. Es darf also nicht kleiner als 1 sein, es sei denn, Sie überschreiben es.

return new ActiveDataProvider([ 
    'pagination' => [ 
     'pageSizeLimit' => [0, 50], 
    ], 
]); 

Jetzt können Sie pagesize Wert setzen alle Datensätze zu erhalten.

Beispiel;

http://localhost/users?per-page=0

2

In yii/rest/IndexAction.php

ändern
return new ActiveDataProvider([ 
     'query' => $modelClass::find(), 
    ]); 

zu

return new ActiveDataProvider([ 
     'query' => $modelClass::find(), 
     'pagination' => false, 
    ]); 

Das ist alles.