[Laravel] Requests
Request được inject tại class Illuminate\Http\Request
:D
1. Request Path & Method
Lấy path
, url
, fullUrl
, isMethod
, is
(check xem có trùng 1 pattern cho trước)
2. Input Trimming & Normalization
Mặc định, Laravel đã có 1 middleware là TrimString
và ConvertEmptyStringsToNull
được liệt kê trong App\Http\Kernel
. Middleware này sẽ tự động trim (dọn dẹp, cắt) tất cả các trường string trong request cũng như chuyển đổi 1 vài giá trị empty string thành null
.
Nó cho phép bạn không phải lo lắng về request trong routes và controllers. Nếu bạn muốn disable các hành động này, hãy xóa bỏ 2 middleware này trong ứng dụng.
3. Retrieving Input: Lấy dữ liệu
3.1. Lấy toàn bộ dữ liệu
1 | $input = $request->all(); |
3.2. Lấy một input value
1 | $name = $request->input('name'); |
Có thể truyền giá trị default cho nó nếu không có giá trị trong request1
$name = $request->input('name', 'Minh');
Array thì sao?1
2$name = $request->input('products.0.name');
$names = $request->input('products.*.name');
Ngoài ra cũng có thể lấy tất cả các tham số truyền vào thông qua input mà không có tham số nào1
$input = $request->input();
3.3. Lấy dữ liệu từ query
Tương tự dư cái trên :v1
2
3$name = $request->query('name');
$name = $request->query('name', 'Helen');
$query = $request->query();
3.4. Lấy dữ liệu qua thuộc tính
1 | $name = $request->name; |
Nó sẽ load từ form payload trước, nếu không có, nó sẽ tìm các trường đối số trong route
3.5. Lấy dữ liệu từ JSON Input
Nếu truyền dữ liệu với header Content-Type = application/json
thì sử dụng dấu chấm để lấy dữ liệu1
$name = $request->input('user.name');
3.6. Lấy một phần của input data
1 | $input = $request->only(['username', 'password']); |
NOTE: Phương thức
only
trả về tất cả các cặp key/value trong request, tuy nhiên, nó sẽ không trả về cặp key/value đó nếu nó không có trong request (không có giá trị default)
Tổng kết:
- Phương thức
only
sử dụng không trả về giá trị mặc định và chỉ lấy giá trị có trong payload, hãy xem xét khi dùng nó (chắc dùng cho update sẽ tiện) all()
: lấy hết dữ liệu,input()
: lấy hết dữ liệu cảGET
vàPOST
(trừ file) và chỉ lấy được 1 trường,query()
thì chỉ lấy ở methodGET
(query string)- Các phương thức (trừ
only
) đều có trả về giá trị mặc định nên không phải xoắn =)) all(), input(), query(), only(), except(),
$request->name,
nó tìm trong payload (các tham sốPOST
vàGET
), sau đó tìm các tham số trong route
[Laravel] Requests