Giao diện
HTTP Requests
Giới thiệu (Introduction)
Class Illuminate\Http\Request cung cấp cách tương tác hướng đối tượng với HTTP request hiện tại, bao gồm lấy input, cookies, và files.
Tương tác với Request (Interacting With The Request)
Truy cập Request (Accessing the Request)
Type-hint Illuminate\Http\Request trong controller method hoặc route closure:
php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request): RedirectResponse
{
$name = $request->input('name');
// Lưu user...
return redirect('/users');
}
}Hoặc trong route closure:
php
use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
// ...
});Request Path, Host và Method
Lấy Request Path
php
$uri = $request->path();
// http://example.com/foo/bar → "foo/bar"Kiểm tra Request Path / Route
php
if ($request->is('admin/*')) {
// ...
}
if ($request->routeIs('admin.*')) {
// ...
}Lấy Request URL
php
$url = $request->url(); // Không có query string
$urlWithQueryString = $request->fullUrl(); // Có query string
// Thêm query string
$request->fullUrlWithQuery(['type' => 'phone']);
// Xóa query string parameter
$request->fullUrlWithoutQuery(['type']);Lấy Request Host
php
$request->host(); // example.com
$request->httpHost(); // example.com:8080
$request->schemeAndHttpHost(); // https://example.comLấy Request Method
php
$method = $request->method();
if ($request->isMethod('post')) {
// ...
}Request Headers
php
$value = $request->header('X-Header-Name');
$value = $request->header('X-Header-Name', 'default');
if ($request->hasHeader('X-Header-Name')) {
// ...
}
// Lấy Bearer token
$token = $request->bearerToken();Request IP Address
php
$ipAddress = $request->ip();
// Mảng tất cả IP addresses (bao gồm proxies)
$ipAddresses = $request->ips();Input
Lấy Input (Retrieving Input)
Tất cả Input Data
php
$input = $request->all(); // array
$input = $request->collect(); // Collection
$request->collect('users')->each(function (string $user) {
// ...
});Lấy giá trị Input
php
$name = $request->input('name');
$name = $request->input('name', 'Sally'); // Với giá trị mặc định
// Array inputs (dùng "dot" notation)
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');Lấy Input từ Query String
php
$name = $request->query('name');
$name = $request->query('name', 'Helen');
$query = $request->query(); // Tất cả query string valuesLấy JSON Input
Gửi request với Content-Type: application/json → dùng input method như bình thường hoặc truy cập qua dynamic properties:
php
$name = $request->input('user.name');Lấy giá trị từ các nguồn cụ thể
php
$input = $request->only(['username', 'password']);
$input = $request->except(['credit_card']);Kiểm tra Input (Input Presence)
php
if ($request->has('name')) { /* ... */ }
if ($request->has(['name', 'email'])) { /* ... */ }
if ($request->hasAny(['name', 'email'])) { /* ... */ }
$request->whenHas('name', function (string $input) {
// Giá trị "name" có mặt...
}, function () {
// Giá trị "name" không có...
});
if ($request->filled('name')) { /* ... */ } // có và không rỗng
if ($request->isNotFilled('name')) { /* ... */ } // thiếu hoặc rỗng
if ($request->anyFilled(['name', 'email'])) { /* ... */ }
if ($request->missing('name')) { /* ... */ }Old Input (Input cũ)
Flash input vào session và lấy lại:
php
$request->flash();
$request->flashOnly(['username', 'email']);
$request->flashExcept('password');
// Redirect kèm flash
return redirect('/form')->withInput();
return redirect('/form')->withInput(
$request->except('password')
);
// Lấy old input
$username = $request->old('username');Trong Blade template:
html
<input type="text" name="username" value="{{ old('username') }}">Trim và Normalize Input
Mặc định, Laravel bao gồm middleware TrimStrings và ConvertEmptyStringsToNull trong global middleware stack, tự động trim strings và chuyển empty strings thành null.
Tắt cho một số requests:
php
->withMiddleware(function (Middleware $middleware): void {
$middleware->trimStrings(except: [
fn (Request $request) => $request->is('admin/*'),
]);
})Files
Lấy Uploaded Files
php
$file = $request->file('photo');
$file = $request->photo;
if ($request->hasFile('photo')) {
// ...
}
// Kiểm tra upload thành công
if ($request->file('photo')->isValid()) {
// ...
}Lưu Uploaded Files
php
$path = $request->photo->store('images');
$path = $request->photo->store('images', 's3');
// Với tên file tùy chỉnh
$path = $request->photo->storeAs('images', 'filename.jpg');
$path = $request->photo->storeAs('images', 'filename.jpg', 's3');Cấu hình Trusted Proxies
Khi chạy sau TLS/SSL terminating load balancers, cấu hình trusted proxies trong bootstrap/app.php:
php
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(at: [
'192.168.1.1',
'10.0.0.0/8',
]);
})Trust tất cả proxies:
php
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(at: '*');
})Cấu hình Trusted Hosts
Giới hạn hosts mà ứng dụng phản hồi trong bootstrap/app.php:
php
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustHosts(at: ['laravel.test']);
})