Request
Lớp Request
của SkillDo dựa trên lớp Illuminate\Http\Request
của Laravel cung cấp một đối tượng để tương tác với yêu cầu HTTP hiện tại đang được ứng dụng của bạn xử lý cũng như truy xuất dữ liệu đầu vào, cookie và file đã được gửi cùng với yêu cầu.
Tương tác với Request
Sử dụng Request
Trong ajax callback sẽ tự động nhận được request là tham số đầu tiên và bạn cần thêm gợi ý lớp SkillDo\Http\Request
để sử dụng
#[NoReturn]
function ajaxCallback(SkillDo\Http\Request $request, $model): void
{
if($request->isMethod('post')) {
response()->success('thành công!');
}
response()->error('không thành công');
}
Hoặc
use SkillDo\Http\Request;
#[NoReturn]
function ajaxCallback(Request $request, $model): void
{
if($request->isMethod('post')) {
response()->success('thành công!');
}
response()->error('không thành công');
}
Hoặc bạn cũng có thể gọi request
bằng phương thức toàn cục: request()
request()->input('name')
Path, Host and Method
Request Path
Phương thức path
trả về thông tin đường dẫn của yêu cầu. Vì vậy, nếu yêu cầu đến được nhắm mục tiêu tại http://example.com/foo/bar
, phương thức đường dẫn sẽ trả về foo/bar
:
$uri = request()->path();
Kiểm tra đường dẫn request
Phương thức is
cho phép bạn xác minh rằng đường dẫn yêu cầu đến khớp với một mẫu nhất định.
Bạn có thể sử dụng ký tự *
làm ký tự đại diện khi sử dụng phương pháp này:
if (request()->is('admin/*')) {
// ...
}
Truy xuất Request URL
Để truy xuất URL đầy đủ cho Request, bạn có thể sử dụng phương thức url
hoặc fullUrl
.
Phương thức url
sẽ trả về URL không có chuỗi truy vấn, trong khi phương thức fullUrl
bao gồm chuỗi truy vấn:
$url = request()->url();
$urlWithQueryString = request()->fullUrl();
Nếu bạn muốn nối thêm dữ liệu query string vào URL hiện tại, bạn có thể gọi phương thức fullUrlWithQuery
.
Phương thức này hợp nhất mảng các biến chuỗi truy vấn đã cho với chuỗi truy vấn hiện tại:
request()->fullUrlWithQuery(['type' => 'phone']);
Nếu bạn muốn lấy URL hiện tại mà không có tham số query string nhất định, bạn có thể sử dụng phương thức fullUrlWithoutQuery
:
request()->fullUrlWithoutQuery(['type']);
Truy xuất Request Host
Bạn có thể truy xuất "host" của Request thông qua các phương thức host
, httpHost
và schemeAndHttpHost
:
$request->host();
$request->httpHost();
$request->schemeAndHttpHost();
Truy xuất Request Method
Phương thức method
sẽ trả về loại HTTP Request. Bạn có thể sử dụng phương thức isMethod
để xác minh loại HTTP khớp với một loại nhất định:
$method = $request->method();
if ($request->isMethod('post')) {
// ...
}
Request Headers
Bạn có thể lấy request header từ SkillDo\Http\Request
bằng cách sử dụng phương thức header
. Nếu header không có trong request, null
sẽ được trả về. Tuy nhiên, phương thức header
chấp nhận một tham số thứ hai tùy chọn sẽ được trả về nếu header không có trong request:
$value = $request->header('X-Header-Name');
$value = $request->header('X-Header-Name', 'default');
Phương thức hasHeader
có thể được sử dụng để xác định xem request có chứa một header cụ thể hay không:
if ($request->hasHeader('X-Header-Name')) {
// ...
}
Bạn có thể sử dụng phương thức bearerToken
để lấy một mã thông báo từ header Authorization
. Nếu không có header nào như vậy, một chuỗi trống sẽ được trả về:
$token = $request->bearerToken();
Request IP Address
Phương thức ip
có thể được sử dụng để lấy địa chỉ IP của máy khách đã thực hiện Request đến ứng dụng của bạn:
$ipAddress = $request->ip();
Nếu bạn muốn lấy một mảng các địa chỉ IP, bao gồm tất cả các địa chỉ IP của máy khách đã được chuyển tiếp bởi proxy, bạn có thể sử dụng phương thức ips
.
Địa chỉ IP "gốc" (original) của máy khách sẽ ở cuối mảng:
$ipAddresses = $request->ips();
Input
Lấy Dữ liệu Input
Lấy Tất cả Dữ liệu Input
Bạn có thể lấy tất cả dữ liệu Input của yêu cầu đến dưới dạng một mảng bằng cách sử dụng phương thức all
.
Phương thức này có thể sử dụng mà không cần biết liệu yêu cầu đến có phải là từ một form HTML hay là một request XHR không:
$input = $request->all();
Bằng cách sử dụng phương thức collect
, bạn có thể lấy tất cả dữ liệu đầu vào của yêu cầu đến dưới dạng một collect
:
$input = $request->collect();
Phương thức collect
cũng cho phép bạn lấy một phần nhỏ của dữ liệu input của request đến dưới dạng một bộ sưu tập:
$request->collect('users')->each(function (string $user) {
// ...
});
Lấy Giá Trị Dữ liệu Input
Sử dụng một số phương thức đơn giản, bạn có thể truy cập tất cả dữ liệu đầu vào của người dùng từ thể hiện SkillDo\Http\Request
mà không phải lo lắng về loại HTTP nào được sử dụng cho request.
Bất kỳ loại HTTP nào đi nữa, phương thức input
có thể sử dụng để lấy dữ liệu input của người dùng:
$name = $request->input('name');
Bạn có thể truyền một giá trị default làm đối số thứ hai cho phương thức input
. Giá trị này sẽ được trả về nếu giá trị input được yêu cầu không có trong request:
$name = $request->input('name', 'Sally');
Khi làm việc với các forms chứa đầu vào là mảng, sử dụng ký hiệu "dấu chấm" để truy cập các mảng:
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');
Bạn có thể gọi phương thức input
mà không có bất kỳ đối số nào để lấy tất cả các giá trị đầu vào dưới dạng một mảng liên kết:
$input = $request->input();
Lấy Dữ Liệu Từ Query String
Trong khi phương thức input
lấy giá trị từ toàn bộ dữ liệu yêu cầu (bao gồm Query String), phương thức query
sẽ chỉ lấy giá trị từ Query String:
$name = $request->query('name');
Nếu dữ liệu Query String request không có, đối số thứ hai cho phương thức này sẽ được trả về:
$name = $request->query('name', 'Helen');
Bạn có thể gọi phương thức query
mà không có bất kỳ đối số nào để lấy tất cả các giá trị Query String dưới dạng một mảng liên kết:
$query = $request->query();
Lấy Giá Trị Input JSON
Khi gửi các yêu cầu JSON đến ứng dụng của bạn, bạn có thể truy cập dữ liệu JSON thông qua phương thức input
miễn là header Content-Type
của request được đặt đúng thành application/json
.
Bạn có thể sử dụng cú pháp "dấu chấm" để lấy giá trị có lồng trong các mảng/đối tượng JSON:
$name = $request->input('user.name');
Lấy Giá Trị Input Dạng Chuỗi
Thay vì lấy dữ liệu đầu vào của request dưới dạng chuỗi nguyên thuỷ, bạn có thể sử dụng phương thức string
để lấy dữ liệu yêu cầu dưới dạng một Stringable
:
$name = $request->string('name')->trim();
Lấy Giá Trị Input Dạng Boolean
Khi xử lý các phần tử HTML như ô checkboxes, ứng dụng của bạn có thể nhận được các giá trị "đúng" thực sự là chuỗi.
Ví dụ, "true" hoặc "on". Để thuận tiện, bạn có thể sử dụng phương thức boolean
để lấy những giá trị này dưới dạng boolean
. Phương thức boolean trả về true
cho 1, "1", true, "true", "on", và "yes". Tất cả các giá trị khác sẽ trả về false:
$archived = $request->boolean('archived');
Lấy Giá Trị Input Dạng Date
Để thuận tiện, giá trị input chứa ngày/giờ có thể được lấy dưới dạng các thể hiện của Carbon bằng cách sử dụng phương thức date
.
Nếu yêu cầu không chứa giá trị đầu vào với tên đã cho, null
sẽ được trả về:
$birthday = $request->date('birthday');
Các đối số thứ hai và thứ ba được chấp nhận bởi phương thức date
có thể được sử dụng để chỉ định định dạng ngày và múi giờ tương ứng:
$elapsed = $request->date('elapsed', '!H:i', 'Europe/Madrid');
Nếu giá trị đầu vào hiện diện nhưng có định dạng không hợp lệ, một InvalidArgumentException sẽ được ném ra; do đó, khuyến nghị kiểm tra giá trị đầu vào trước khi gọi phương thức date.
Lấy Input Thông Qua Thuộc Tính Động
Bạn cũng có thể truy cập Input bằng cách sử dụng các thuộc tính động trên SkillDo\Http\Request
.
Ví dụ, nếu một trong các form của bạn ch ứa một trường name
, bạn có thể truy cập giá trị của trường như sau:
$name = $request->name;
Khi sử dụng các thuộc tính động, SkillDo sẽ tìm giá trị của tham số trong dữ liệu yêu cầu.