Osumi Framework
es en eu v9.10.0 GitHub

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:

Ezin dute body itzuli, streaming erantzun batek ez baitu memoria barruan materializatutako gorputz osorik.

Middleware batek stop => true itzultzen badu emisioa hasi aurretik:


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:

  1. stream irakurgarria;
  2. HTTP goiburuak;
  3. HTTP egoera-kodea;
  4. blokearen tamaina;
  5. 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.