Request trong Laravel 8 Chap 1- Giới thiệu

Request là khái niệm khá quen thuộc chắc hẳn chúng ta không cần phải tìm hiểu nữa phải không nào. Chính vì vậy bài này chúng ta không đi tìm định nghĩa về request mà chỉ tập trung nghiên cứu về Request trong Laravel 8 thôi các bạn nhé!

1. Request Trong Laravel 8 là gì?

Request trong Laravel 8 là một object chứa các thông tin liên quan đến HTTP request hiện tại. Dựa vào object này chúng ta có thể lấy được các thông tin như input, cookie, file,...

Class Request này nằm trong Illuminate\Http\Request core của Laravel. Object này được base trên http-foundation package của Symfony Laravel chỉ custom lại một chút và thêm một số phương thức.

Có lẽ phải đi vào thực hành chúng ta mới nắm rõ được về khái niệm Object này.

2. Tương tác với Request trong Laravel.

Mặc định Request object đã được binding vào service container của Laravel rồi, nên chúng ta muốn dùng nó thì có thể binding trực tiếp vào trong đối số (argument) khi cần.

Ví Dụ: Inject trong Route.

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
   // code
});

Ví Dụ: Inject trong Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
   /**
     * Store a new user.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $name = $request->input('name');

       //
    }
}

Lúc này ở route bạn sẽ không cần phải khai báo param $request nữa.

use App\Http\Controllers\UserController;

Route::post('/user', [UserController::class, 'store']);

Truy vấn thông tin URL/PATH

Để lấy path của request các bạn sử dụng method path.

Ví Dụ:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
    return "Path: " . $request->path();
});

Kết quả:

Trong trường hợp bạn muốn lấy ra URL của request các bạn có thể sử dụng phương thức url.

Ví Dụ:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
    return "Path: " . $request->url();
});

Kết quả:

Trong trường hợp các bạn muốn lấy ra full URL của request các bạn có thể sử dụng phương thức fullUrl.

Ví Dụ:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
    return "Path: " . $request->fullUrl();
});

Kết quả:

Trong trường hợp bạn muốn add thêm query vào trong path các bạn có thể sử dụng phương thức fullUrlWithQuery.

Ví Dụ:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
    return "Path: " . $request->fullUrlWithQuery(['name' => 'PHAMNHANTUIEN']);
});

Kết quả:

Để kiểm tra path hiện tại có match với một path rule nào đó hay không các bạn có thể sử dụng phương thức is.

Ví Dụ: Kiểm tra xem path hiện tại có phải bắt đầu bằng admin hay không?

if ($request->is('admin/*')) {
   //
}

Bạn cũng có thể sử dụng phương thức routeIs để kiểm tra tương tự như phương thức is, nhưng là check qua route name.

Ví Dụ: Kiểm tra xem path hiện tại có phải nằm trong route name bắt đầu bằng admin không?

if ($request->routeIs('admin.*')) {
   //
}

Truy vấn method của request

Để lấy ra method của request các bạn có thể sử dụng phương thức method.

Ví Dụ:

$request->method();

Bạn cũng có thể sử dụng phương thức isMethod để kiểm tra phương thức của request.

Ví Dụ: Kiểm tra xem request có phải POST request không?

if ($request->isMethod('post')) {
   //
}

Truy vấn thông tin headers

Nếu muốn truy vấn thông tin liên quan đến header của request các bạn có thể sử dụng phương thức header.

Ví Dụ: Lấy ra user-agent của reuquest.

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
    return 'User Agent: ' . $request->header('user-agent');
});

Kết quả:

Trong trường hợp request header cần lấy ra không tồn tại thì phương thức header sẽ trả về null. Nếu muốn thay đổi giá trị default này chúng ta có thể truyền thêm tham số thứ 2 vào hàm header.

Ví Dụ:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function (Request $request) {
    return 'Header: ' . $request->header('hoctv', 'Okey bạn ey');
});

Kết quả:

Bạn cũng có thể lấy ra bearer token của request bằng cách sử dụng phương thức bearerToken.

Ví Dụ:

$token = $request->bearerToken();

Cách viết trên tương tự với:

$token = $request->header('Authorization', '');

Lấy ra IP của người dùng.

Để lấy ra địa chỉ ip address của người dùng các bạn sử dụng phương thức ip.

Ví Dụ:

$ipAddress = $request->ip();

Test

Route::get('/', function (Request $request) {
    return 'Ip của bạn: '. $ipAddress = $request->ip();
});

Lời kết:

Trên đây là toàn bộ các request trong Laravel 8 mà chúng ta thường hay sử dụng. Bạn chỉ cần nhớ chúng ta có thể binding trực tiếp object request trong Laravel 8 là được, cú pháp thì có thể bookmark bài này lại để dùng khi cần nhé. Chúc các bạn học tốt!

Bình luận