Die PHP-API-Paginierung von Google Drive funktioniert nicht, wenn unterschiedliche Anfragen verwendet werden
P粉993712159
P粉993712159 2023-09-06 15:00:23
0
1
538

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粉993712159
P粉993712159

Antworte allen(1)
P粉546138344

使用 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);
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage