Kalo te dokumentacioni
PHP

Faqosja

Një faqe, të gjitha faqet ose një element në një kohë, në çdo listë që faqoset.

list, listAll dhe iterate

Çdo listë që faqoset ka tri metoda. list merr një faqe dhe kthen një OpenEmail\Result\Page. listAll ndjek cursor-in nëpër të gjitha faqet dhe kthen një array të vetëm. iterate i përshkon të njëjtat faqe një element në një kohë dhe kthen një Generator, i cili e merr faqen e radhës vetëm kur arrini aty. Të tria marrin filtrat e listës, limit:, cursor: dhe apiKey:.

three_ways.php
$page = $client->emails->list(status: 'failed', limit: 50); foreach ($page as $email) {    echo $email['id'], ' ', $email['lastError'] ?? '', PHP_EOL;} $failures = $client->emails->listAll(status: 'failed'); foreach ($client->emails->iterate(status: 'failed') as $email) {    echo $email['id'], PHP_EOL;} echo count($failures), ' ', $page->hasMore ? 'more to come' : 'that is all', PHP_EOL;

Të njëjtat tri emra përsëriten kudo ku një hapësirë emrash ka më shumë se një listë, të emërtuar sipas listës që përshkojnë: listEvents, listAllEvents dhe iterateEvents te emails, listDeliveries, listAllDeliveries dhe iterateDeliveries te webhooks, e kështu me radhë.

OpenEmail\Result\Page

itemsarray
Rreshtat e kësaj faqeje, të nxjerrë nga zarfi `data` i API-së, secili një array asociativ. Bosh kur faqja nuk mban asgjë.
hasMorebool
Nëse vijon një faqe tjetër. Kur API-ja nuk dërgon `hasMore`, vlera është true pikërisht kur ka një `nextCursor`.
nextCursorstring or null
Çfarë të jepni prapa si `cursor:` për faqen e radhës. Në faqen e fundit, null.

Një faqe është e pandryshueshme: vetitë e saj janë readonly. Është gjithashtu IteratorAggregate dhe Countable, ndaj foreach ($page as $item) i përshkon rreshtat e saj dhe count($page) i numëron.

Një Generator

iterate nuk kërkon asgjë derisa të filloni ta përshkoni, dhe e kërkon faqen e radhës vetëm pasi të jetë dhënë çdo element i faqes aktuale, ndaj çdo gjë që ndalon herët i ndal edhe kërkesat: break e përfundon përshkimin, po ashtu edhe kthimi nga funksioni që përmban ciklin.

generator.php
$latest = []; foreach ($client->emails->iterate(status: 'failed', limit: 100) as $email) {    $latest[] = $email;     if (count($latest) === 10) {        break;    }} $invoice = null; foreach ($client->emails->iterate(status: 'failed') as $email) {    if (($email['tags']['invoice'] ?? null) === 'inv_2026_09_4192') {        $invoice = $email;         break;    }} echo count($latest), ' ', $invoice['id'] ?? 'not found', PHP_EOL;

Çdo gjë që ka nevojë për çdo element, si iterator_to_array() e thirrur mbi Generator-in, lexon të gjitha faqet para se të kthehet, ashtu si listAll.

Një Generator mund të përshkohet vetëm një herë. Përshkimi i tij për herë të dytë hedh përjashtim, ndaj thirreni sërish iterate kur ju duhen sërish elementet, ose ruani elementet në vend të Generator-it.

Vazhdimi nga një cursor

Një cursor është i errët. Ruani nextCursor e faqes së fundit që lexuat dhe jepeni prapa si cursor: për të vazhduar prej andej, në një kërkesë të mëvonshme ose në një proces tjetër. listAll dhe iterate marrin gjithashtu cursor: dhe e nisin përshkimin pas tij.

resume.php
$firstPage = $client->emails->list(status: 'failed', limit: 25);$saved = $firstPage->nextCursor; if ($saved !== null) {    $rest = $client->emails->listAll(status: 'failed', cursor: $saved);    echo count($rest), PHP_EOL;}

Një cursor i përket listës dhe filtrave nga të cilët erdhi, ndaj dërgoni të njëjtët filtra me të. Një cursor që lista nuk e njeh refuzohet me invalid_cursor, dhe atëherë zgjidhja është të nisni nga e para pa cursor.

limit:

limit: është madhësia e çdo faqeje, jo një total. Te list është numri i rreshtave që kthehen. Te listAll dhe iterate është numri që kërkon çdo kërkesë, ndaj një vlerë më e madhe do të thotë më pak vajtje-ardhje për të njëjtët rreshta. Çdo listë ka diapazonin dhe parazgjedhjen e vet, më shpesh nga 1 deri në 100 dhe 25 kur nuk dërgoni asgjë, dhe një vlerë jashtë diapazonit refuzohet në vend që të kufizohet. Referenca e çdo liste jep diapazonin e saj.

Kur ndalon një përshkim

  • Kur një faqe thotë se hasMore është false.
  • Kur një faqe nuk mbart nextCursor, sepse një faqe që pretendon se ka më shumë pa emërtuar asnjë cursor do të përsëritej në cikël përgjithmonë.
  • Kur API-ja kthen një cursor që shëtitja e ka ndjekur tashmë, për të njëjtën arsye.

Çdo faqe është një GET, ndaj, si çdo lexim, riprovohet më vete para se të hidhet ndonjë përjashtim. Një dështim që u mbijeton riprovave hidhet jashtë listAll, dhe elementet e marra tashmë hidhen poshtë. Te iterate, elementet e faqeve të mëparshme janë dhënë tashmë deri atëherë, ndaj bëjeni atë që kryen cikli të sigurt për t’u ekzekutuar dy herë, ose faqosni me list dhe ruani çdo nextCursor, që një përpjekje e dytë të nisë aty ku ndaloi e para.

Thread-et dhe draftet

threads->list dhe drafts->list, bashkë me listAll dhe iterate të tyre, faqosin me pageToken dhe nextPageToken të API-së në vend të një cursor-i. Klienti e fsheh këtë ndryshim: jepeni token-in si cursor: dhe lexojeni nga nextCursor.

page_token.php
$page = $client->threads->list(folder: 'inbox', limit: 50);$later = $page->hasMore ? $client->threads->list(folder: 'inbox', limit: 50, cursor: $page->nextCursor) : null; echo count($page), ' ', $later === null ? 0 : count($later), PHP_EOL;

Serveri ofron një token sa herë që një faqe kthehet e plotë, ndaj hasMore mund të jetë true në atë që del të jetë faqja e fundit, dhe atëherë thirrja e radhës nuk kthen asnjë element.

Faqe që mbartin më shumë

Disa lista përgjigjen me më shumë se rreshta dhe kthejnë një objekt të tyrin nga OpenEmail\Result në vend të Page. Secili është i pandryshueshëm, IteratorAggregate mbi rreshtat e tij dhe Countable.

MetodaKthenÇfarë shton
addresses->listAddressBookPageaddresses në vend të items, si dhe unrestricted e domains, me hasMore dhe nextCursor.
addresses->listAllAddressBookTë gjitha adresat në addresses, me unrestricted dhe domains siç i raportoi faqja e fundit. Është i vetmi listAll që kthen të gjithë librin e adresave në vend të një array-i. addresses->iterate jep vetëm adresat.
contacts->listPeoplePeoplePageseen, false kur çelësi nuk mund të lexojë adresat e para në postë. listAllPeople dhe iteratePeople kthejnë vetëm njerëzit.
tempMail->listMessagesTempMessagesPageexpiresAt, kur skadon kutia. listAllMessages dhe iterateMessages kthejnë vetëm mesazhet.
templates->listSendsTemplateSendsFaqosur sipas numrit, jo sipas cursor-it: items, total, page dhe pageSize. Kërkojeni faqen e radhës me page:.
emails->sendBatchBatchResultNuk është faqe: items, një për çdo mesazh që dërguat, me numrat sent dhe failed.

Lista që kthejnë array-n e API-së

Disa lista faqosin sipas zhvendosjes (offset), sipas numrit të faqes ose sipas një cursor-i numerik të tyrin, dhe kthejnë trupin e dekoduar ashtu siç erdhi, një array me data, në vend të një Page. Nuk kanë listAll ose iterate, ndaj faqosjen e bëni vetë.

MetodaFaqoset meÇfarë kthehet
exports->listlimit: dhe offset:data, total dhe hasMore.
imports->listFailuresafter: dhe limit:data dhe nextCursor, një numër i plotë për t’u dhënë prapa si after:, që është null në faqen e fundit.
subscriptions->list dhe subscriptions->listDomainslimit: dhe offset:data, total, counts dhe hasMore.
billing->listInvoicespage: dhe limit:data, total, page, limit, hasMore dhe metered.
offset_paging.php
$offset = 0; do {    $batch = $client->subscriptions->list(status: 'active', limit: 50, offset: $offset);     foreach ($batch['data'] as $row) {        echo $row['senderEmail'], ' ', $row['total'], PHP_EOL;    }     $offset += count($batch['data']);} while ($batch['hasMore'] && $batch['data'] !== []);

Një listë që nuk faqoset fare, si languages->list, labels->listColors ose roles->listPermissions, i kthen menjëherë rreshtat e saj si një listë të thjeshtë.