[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à TrimStringConvertEmptyStringsToNull đượ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 request

1
$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ào
1
$input = $request->input();

3.3. Lấy dữ liệu từ query

Tương tự dư cái trên :v

1
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ệu

1
$name = $request->input('user.name');

3.6. Lấy một phần của input data

1
2
3
4
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');

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ả GETPOST (trừ file) và chỉ lấy được 1 trường, query() thì chỉ lấy ở method GET (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ố POSTGET), sau đó tìm các tham số trong route
Author

Ming

Posted on

2019-11-23

Updated on

2021-04-10

Licensed under

Comments