Heim  >  Fragen und Antworten  >  Hauptteil

Die PHP-API-Paginierung von Google Drive funktioniert nicht, wenn unterschiedliche Anfragen verwendet werden

Ich verwende die Google Drive PHP API im Laravel (v9.0)-Projekt. Was das Paging betrifft, hoffe ich auf den folgenden Prozess:

  1. Holen Sie sich die erste Seite der Datei und geben Sie sie an das Frontend zurück
  2. Wenn der Benutzer zum Ende der Seite scrollt, fordert das Frontend die nächste Seite mit Dateien an
  3. Das Backend empfängt die Anfrage und ruft die entsprechende Seite von der Google Drive API ab.

Das Problem, mit dem ich konfrontiert bin, besteht darin, dass das Frontend die nächste Seite anfordert (im Beispiel unten pageToken 具有之前 Google Drive 调用中的 nextPageToken 值) ,Google 将引发错误:代码:400,消息:无效值,位置:pageToken Unten ist der Code, den ich verwende:

).
$pageToken = request()->input('pageToken');

$optParams = [
    'q' => '' . $parentQuery,
    'pageSize' => $paginateSize,
    'fields' => 'nextPageToken, files(id, name, parents)',
];

if ($pageToken) {
    $optParams['pageToken'] = $pageToken;
}

$response = $this->service->files->listFiles($optParams);

Wenn ich jedoch alle Seiten erhalte, bevor ich zum Backend zurückkehre, scheint es zu funktionieren:

$optParams = [
    'q' => '' . $parentQuery,
    'pageSize' => $paginateSize,
    'fields' => 'nextPageToken, files(id, name, parents)',
];

$files = [];

do {
    $results = $this->service->files->listFiles($optParams);

    $files = array_merge($files, $results->getFiles());

    $pageToken = $results->getNextPageToken();

    if ($pageToken) {
        $optParams['pageToken'] = $pageToken;
    }

} while ($pageToken);

Ich verstehe möglicherweise falsch, wie die Paginierung in der Google Drive-API verwendet wird, aber gibt es eine Möglichkeit, Inhalte wie in meinem ersten Beispiel zu paginieren?

P粉993712159P粉993712159382 Tage vor480

Antworte allen(1)Ich werde antworten

  • P粉546138344

    P粉5461383442023-09-07 11:36:00

    使用 issetempty 函数检查 pageToken 值是否有效

    $pageToken = request()->input('pageToken');
    
    $optParams = [
        'q' => '' . $parentQuery,
        'pageSize' => $paginateSize,
        'fields' => 'nextPageToken, files(id, name, parents)',
    ];
    
    if (isset($pageToken) && !empty($pageToken)) {
        $optParams['pageToken'] = $pageToken;
    }
    
    $response = $this->service->files->listFiles($optParams);

    Antwort
    0
  • StornierenAntwort