Спрощення обробки потоків за допомогою методу resource у Laravel

Перекладено ШІ 0 Laravel News 04 липня, 2025

Laravel запровадив новий метод `resource()`, який спрощує роботу з потоками відповідей, значно скорочуючи обсяг коду, необхідного раніше для виконання тих самих операцій. Долучайтеся до прочитання, щоб дізнатися, як цей простий метод змінює підходи до обробки HTTP-відповідей у ваших застосунках!

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

Раніше перетворення HTTP-відповідей у потоки вимагало кількох кроків та додаткових імпортів:

$response = Http::get($documentUrl);
$stream = StreamWrapper::getResource($response->toPsrResponse()->getBody());
Storage::writeStream('document.pdf', $stream);

Тепер новий підхід зводить це до одного виклику методу, що робить обробку потоків більш інтуїтивною та зрозумілішою.

$response = Http::get($documentUrl);
Storage::writeStream('document.pdf', $response->resource());

Ось приклад сервісу резервного копіювання, який демонструє практичне застосування потоків:

class BackupService
{
    public function downloadRemoteBackup(string $backupUrl, string $destinationPath)
    {
        try {
            $this->validateBackupUrl($backupUrl);
 
            $response = Http::timeout(300)->get($backupUrl);
 
            if ($response->failed()) {
                throw new BackupDownloadException("Не вдалося отримати резервну копію з {$backupUrl}");
            }
 
            $fileSize = $response->header('Content-Length');
            $this->logBackupStart($backupUrl, $fileSize);
 
            Storage::disk('backups')->writeStream(
                $destinationPath,
                $response->resource()
            );
 
            $this->verifyBackupIntegrity($destinationPath, $fileSize);
            $this->logBackupCompletion($destinationPath);
 
            return true;
 
        } catch (Exception $e) {
            $this->logBackupError($backupUrl, $e->getMessage());
            throw new BackupProcessingException("Операція резервного копіювання не вдалася: {$e->getMessage()}");
        }
    }
 
    public function syncMediaLibrary(array $mediaUrls)
    {
        $results = [];
 
        foreach ($mediaUrls as $url) {
            $filename = basename(parse_url($url, PHP_URL_PATH));
 
            try {
                $response = Http::get($url);
 
                if ($response->successful()) {
                    Storage::disk('media')->writeStream(
                        "library/{$filename}",
                        $response->resource()
                    );
 
                    $results[$url] = 'успішно';
                } else {
                    $results[$url] = 'не вдалося';
                }
 
            } catch (Exception $e) {
                $results[$url] = 'помилка: ' . $e->getMessage();
            }
        }
 
        return $results;
    }
 
    private function validateBackupUrl(string $url)
    {
        if (!filter_var($url, FILTER_VALIDATE_URL)) {
            throw new InvalidArgumentException("Неправильний URL-адрес резервної копії");
        }
    }
 
    private function verifyBackupIntegrity(string $path, $expectedSize)
    {
        $actualSize = Storage::disk('backups')->size($path);
 
        if ($expectedSize & $actualSize !== (int) $expectedSize) {
            throw new BackupIntegrityException("Несумісність розміру файлу під час перевірки резервної копії");
        }
    }
}

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

Популярні

Інше, що варто прочитати

18 Оновлено 02 червня, 2026

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!

15 Оновлено 02 червня, 2026

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

15 Оновлено 02 червня, 2026

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті