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.
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!
Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту
Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті