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

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

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