Спрощення обробки потоків за допомогою методу 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.

Популярні

Logomark Logotype

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

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

Logomark Logotype

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

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

Logomark Logotype

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

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