Migrazio-gida: 9.9.1 → 9.10.0
Osumi Framework 9.10.0 bertsioak HTTP erantzunak streaming bidez bidaltzeko euskarri natiboa gehitzen du.
9.9.1 bertsiotik eguneratzea atzerantz bateragarria da eta ez du lehendik dagoen aplikazio-kodean aldaketarik behar.
Bertsio honek ez du migrazio automatikoko urratsik, ez baita aplikazioaren fitxategirik edo konfiguraziorik eraldatu behar.
Streaming erantzunak
Osagaiek OStreamResponse bat zuzenean itzul dezakete orain run() metodotik.
<?php
declare(strict_types=1);
namespace Osumi\OsumiFramework\App\Module\Download;
use Osumi\OsumiFramework\Core\OComponent;
use Osumi\OsumiFramework\Web\OStreamResponse;
class DownloadComponent extends OComponent {
/**
* Stream a file to the client.
*
* @return OStreamResponse Streamed HTTP response.
*/
public function run(): OStreamResponse {
$stream = fopen(
'/path/to/file.zip',
'rb'
);
if ($stream === false) {
throw new \RuntimeException(
'Could not open file.'
);
}
return new OStreamResponse(
$stream,
[
'Content-Type' => 'application/zip',
'Content-Length' => strval(
filesize('/path/to/file.zip')
),
'Content-Disposition' => 'attachment; filename="file.zip"'
]
);
}
}
run() metodoak OStreamResponse itzulera-mota esplizituki deklaratzen duen osagai batek ez du txantiloi-fitxategirik behar.
Bizi-zikloa
Streaming erantzun batek fluxu hau erabiltzen du:
before Middleware
↓
Osagaia
↓
OStreamResponse
↓
afterRender Middleware
↓
afterResponse Middleware
↓
Datu-baseko konexioak itxi
↓
HTTP goiburuak
↓
Stream-a blokeka bidali
Streaming erantzunei ez zaie layout-ik aplikatzen.
Framework-ak ez du stream-eko byterik bidaltzen afterRender eta afterResponse amaitu arte.
Horri esker Middleware batek eskaera gelditu dezake deskarga hasi aurretik.
Middleware-ak
Streaming erantzun batean:
$data['is_streaming_response'] === true
Middleware-ek honako hauek alda ditzakete:
contextheadersstatus_codestopmessage
Ezin dute body itzuli, streaming erantzun batek ez baitu memoria barruan materializatutako gorputz osorik.
Middleware batek stop => true itzultzen badu emisioa hasi aurretik:
- stream-a baztertzen da;
- erantzun normalaren goiburuak berrezartzen dira;
- ohiko errore-erantzuna sortzen da;
- ez da stream-eko byterik bidaltzen.
Baliabidearen kudeaketa
Lehenespenez, OStreamResponse objektuak stream-aren jabetza framework-arena dela jotzen du eta automatikoki ixten du.
Blokearen tamaina lehenetsia 1 MiB da; horri esker fitxategi handiak bidal daitezke eduki osoa memorian kargatu gabe.
new OStreamResponse(
$stream,
$headers,
200,
1048576,
true
);
Parametroak hauek dira:
- stream irakurgarria;
- HTTP goiburuak;
- HTTP egoera-kodea;
- blokearen tamaina;
- stream-a amaitzean automatikoki itxi behar den.
Bateragarritasuna
Txantiloietan oinarritutako ohiko erantzunek aldaketarik gabe funtzionatzen jarraitzen dute.
Lehendik dauden osagaiek honako sinadura hauek erabiltzen jarrai dezakete:
public function run(): void
public function run(ORequest $req): void
public function run(MyDTO $dto): void
OStreamResponse berriak aukera horiek zabaltzen ditu eta ez du ohiko renderizazio-sistema ordezkatzen.