Giao diện
HTTP Responses
Tạo Responses (Creating Responses)
Strings và Arrays
Cách cơ bản nhất — trả string hoặc array từ route/controller:
php
Route::get('/', function () {
return 'Hello World';
});
// Array tự động chuyển thành JSON
Route::get('/', function () {
return [1, 2, 3];
});Response Objects
Trả full Illuminate\Http\Response instance để tùy chỉnh status code và headers:
php
Route::get('/home', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});Eloquent Models và Collections
Trả trực tiếp Eloquent models/collections — Laravel tự động chuyển thành JSON:
php
use App\Models\User;
Route::get('/user/{user}', function (User $user) {
return $user;
});Gắn Headers vào Responses
php
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
// Hoặc dùng withHeaders
return response($content)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
]);Gắn Cookies vào Responses
php
return response('Hello World')->cookie(
'name', 'value', $minutes
);
return response('Hello World')->withoutCookie('name');Cookies và Encryption
Mặc định, tất cả cookies của Laravel được mã hóa và ký. Để tắt mã hóa cho một số cookies:
php
->withMiddleware(function (Middleware $middleware): void {
$middleware->encryptCookies(except: [
'cookie_name',
]);
})Redirects
Redirect responses là instances của Illuminate\Http\RedirectResponse:
php
Route::get('/dashboard', function () {
return redirect('/home/dashboard');
});
// Redirect về trang trước
Route::post('/user/profile', function () {
// Validate request...
return back()->withInput();
});Redirect đến Named Routes
php
return redirect()->route('profile');
// Với parameters
return redirect()->route('profile', ['id' => 1]);Redirect đến Controller Actions
php
use App\Http\Controllers\UserController;
return redirect()->action([UserController::class, 'index']);
return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);Redirect đến External Domains
php
return redirect()->away('https://www.google.com');Redirect kèm Flashed Session Data
php
Route::post('/user/profile', function () {
// ...
return redirect('/dashboard')->with('status', 'Profile updated!');
});Truy cập flash data trong Blade:
html
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endifCác kiểu Response khác (Other Response Types)
View Responses
php
return response()
->view('hello', $data, 200)
->header('Content-Type', $type);JSON Responses
php
return response()->json([
'name' => 'Abigail',
'state' => 'CA',
]);
// JSONP
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->withCallback($request->input('callback'));File Downloads
php
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
// Xóa file sau khi download
return response()->download($pathToFile)->deleteFileAfterSend();File Responses
Hiển thị file (PDF, ảnh) trực tiếp trong browser:
php
return response()->file($pathToFile);
return response()->file($pathToFile, $headers);Streamed Responses
Streaming data đến client khi đang tạo, giảm memory usage:
php
Route::get('/stream', function () {
return response()->stream(function (): void {
foreach (['developer', 'admin'] as $string) {
echo $string;
ob_flush();
flush();
sleep(2);
}
}, 200, ['X-Accel-Buffering' => 'no']);
});Hoặc dùng Generator:
php
Route::post('/chat', function () {
return response()->stream(function (): Generator {
$stream = OpenAI::client()->chat()->createStreamed(...);
foreach ($stream as $response) {
yield $response->choices[0];
}
});
});Streamed JSON Responses
Stream dữ liệu JSON lớn:
php
return response()->streamJson([
'users' => User::cursor()->map(function (User $user) {
return [
'name' => $user->name,
'email' => $user->email,
];
}),
]);Event Streams (SSE)
php
return response()->eventStream(function (): Generator {
$stream = OpenAI::client()->chat()->createStreamed(...);
foreach ($stream as $response) {
yield $response->choices[0]->delta->content;
}
});Streamed Downloads
php
return response()->streamDownload(function () {
echo GitHub::api('repo')
->contents()
->readme('laravel', 'laravel')['contents'];
}, 'laravel-readme.md');Response Macros
Định nghĩa response tùy chỉnh tái sử dụng bằng macro method trong AppServiceProvider:
php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Response::macro('caps', function (string $value) {
return Response::make(strtoupper($value));
});
}
}Sử dụng macro:
php
return response()->caps('foo');