Спрощене оброблення стрім-відповідей у Laravel

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Ефективна робота з HTTP-стрімами в Laravel стала ще простішою завдяки новому методу `resource()`. Досліджуйте, як цей інструмент перетворює складні завдання завантаження файлів на прості завдання, зменшуючи обсяг коду та підвищуючи продуктивність вашого додатку!

Керування HTTP-стрімами у Laravel традиційно вимагало кількох кроків та перетворень, особливо під час завантаження чи передачі файлів. Проте новий метод resource() значно спрощує цей процес, дозволяючи виконувати складні операції з потоками за допомогою одного виклику методу.

Цей метод особливо корисний для завантаження файлів з зовнішніх джерел і їх зберігання у системі зберігання вашого додатка, уникаючи необхідності створювати тимчасові файли або виконувати складні перетворення потоків.

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;

// Старий підхід вимагав кількох перетворень
$response = Http::get($url);
Storage::put('file.pdf', StreamWrapper::getResource(
    $response->toPsrResponse()->getBody()
));

// Новий спрощений підхід
Storage::put('file.pdf', Http::get($url)->resource());

Розглянемо практичний приклад сервісу обробки документів:

<?php

namespace App\Services;

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
use App\Exceptions\DocumentProcessingException;

class DocumentProcessor
{
    public function processRemoteDocument(string $documentUrl, string $reference)
    {
        try {
            $response = Http::timeout(30)->get($documentUrl);

            if (!$response->successful()) {
                throw new DocumentProcessingException(
                    "Не вдалося отримати документ: {$response->status()}"
                );
            }
            // Зберегти оригінальний документ
            $originalPath = "documents/{$reference}/original.pdf";
            Storage::put($originalPath, $response->resource());
            // Створити резервну копію
            Storage::disk('backup')->writeStream(
                $originalPath,
                Storage::readStream($originalPath)
            );
            return [
                'reference' => $reference,
                'size' => Storage::size($originalPath),
                'path' => $originalPath
            ];
        } catch (Exception $e) {
            Log::error('Обробка документа не вдалася', [
                'url' => $documentUrl,
                'reference' => $reference,
                'error' => $e->getMessage()
            ]);

            throw $e;
        }
    }
}

Метод resource() спрощує обробку потоків у додатках Laravel, роблячи операції з файлами простішими та зменшуючи складність вашого коду

Популярні

Logomark Logotype

Інтеграція Laravel Socialite з бібліотекою Google Client PHP

Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті

Logomark Logotype

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення