Skip to content

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.com

Lấ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 values

Lấ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 TrimStringsConvertEmptyStringsToNull 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']);
})