Класс Response
Класс Response позволяет формировать HTTP-ответы с различным содержимым, статусами и заголовками. Он предоставляет удобные методы для создания JSON-ответов, скачивания файлов, потоковой передачи данных и многого другого. В Laravel ответы могут быть созданы как через глобальную функцию response, так и через фасад Response.
Синтаксис
<?php
response($content, $status, $headers);
?>
Первым параметром передаётся содержимое ответа, вторым - HTTP-статус, третьим - массив заголовков.
Пример
Создадим простой ответ с текстовым содержимым и статусом 200:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/text', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});
?>
Результат выполнения кода:
Hello World
Пример
Создадим JSON-ответ с помощью метода json:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/user', function () {
$data = [
'name' => 'John Doe',
'email' => 'john@example.com',
'age' => 30
];
return response()->json($data, 200);
});
?>
Результат выполнения кода:
{"name":"John Doe","email":"john@example.com","age":30}
Пример
Добавим к ответу несколько заголовков с помощью метода withHeaders:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/custom-headers', function () {
return response('Custom headers response')
->withHeaders([
'X-Custom-Header' => 'Custom Value',
'X-Another-Header' => 'Another Value',
'Cache-Control' => 'no-cache'
]);
});
?>
Пример
Создадим файл для скачивания с помощью метода download:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/download-file', function () {
$path = storage_path('app/public/document.pdf');
if (!file_exists($path)) {
abort(404, 'File not found');
}
return response()->download($path, 'document.pdf');
});
?>
Пример
Используем метод file для отображения файла в браузере:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/show-image', function () {
$path = storage_path('app/public/image.jpg');
if (!file_exists($path)) {
abort(404, 'File not found');
}
return response()->file($path);
});
?>
Пример
Создадим потоковый ответ с помощью метода stream:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/stream', function () {
$callback = function () {
for ($i = 1; $i <= 10; $i++) {
echo "Chunk {$i}\n";
flush();
usleep(500000);
}
};
return response()->stream($callback, 200, [
'Content-Type' => 'text/plain',
]);
});
?>
Результат выполнения кода:
"Chunk 1\nChunk 2\nChunk 3\n..."
Пример
Создадим ответ с пустым содержимым и статусом 204 с помощью метода noContent:
<?php
use Illuminate\Support\Facades\Route;
Route::delete('/user/{id}', function ($id) {
// Код удаления пользователя
return response()->noContent();
});
?>
Смотрите также
-
класс
JsonResponse,
который используется для JSON-ответов -
класс
RedirectResponse,
который используется для редиректов -
класс
StreamedResponse,
который используется для потоковых ответов -
класс
BinaryFileResponse,
который используется для файловых ответов