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 та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту
Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті