Tìm kiếm bài viết

Laravel: Tìm hiểu về HTTP Requests (Phần 1)

12.10.2020

0/5 (0 Reviews)

Ta sẽ cùng tìm hiểu về HTTP Requests trong laravel để xem chúng hoạt động như thế nào để quản lý các HTTP Requests nhé. Cùng học Laravel thôi nào!

    Accessing The Request trong Laravel

    Khi lập trình web, thiết kế web bạn thường thấy để tối ưu web thì bạn cần xử lý các Request trong Laravel 1 cách tốt nhất. Để lấy một instance của HTTP request hiện tại thông qua dependency injection, bạn nên type-hint vào class Illuminate\Http\Request trong phương thức controller. Các request đến sẽ được tự động injected bởi :

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

    Dependency Injection & Route Parameters

    Nếu phương thức controller của bạn cũng mong đợi input từ tham số route thì bạn nên liệt kê danh sách tham số route vào sau các dependencies khác của bạn. Ví dụ, nếu route của bạn định nghĩa như sau:

    Route::put('user/{id}', '');
    

    Bạn vẫn có thể type-hint Illuminate\Http\Request và truy cập vào tham số route id bằng cách định nghĩa phương thức trong controller như sau:

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class UserController extends Controller
    {
        /**
         * Update the specified user.
         *
         * @param  Request  $request
         * @param  string  $id
         * @return Response
         */
        public function update(Request $request, $id)
        {
            //
        }
    }
    

    Accessing The Request Via Route Closures

    Bạn cũng có thể type-hint class Illuminate\Http\Request trong route Closure. Service container sẽ tự động inject các request Closure khi nó được thực thi:

    use Illuminate\Http\Request;
    
    Route::get('/', function (Request $request) {
        //
    });
    

    Request Path & Method

    Đối tượng Illuminate\Http\Request cung cập một số phương thức để kiểm tra HTTP request cho ứng dụng của bạn và kế thừa class Symfony\Component\HttpFoundation\Request. Chúng ta sẽ thảo luận một số phương thức quan trọng dưới đây.

    Retrieving The Request Path

    Phương thức path trả về thông tin đường dẫn của request. Vì vậy, Nếu request gửi đến là http://domain.com/foo/bar, phương thức path sẽ trả về foo/bar:

    $uri = $request->path();
    

    Phương thức is sẽ cho phép bạn xác nhận những request gửi đến có đường dẫn phù hợp với pattern hay không. Bạn có thể sử dụng ký tự * khi sử dụng phương thức này:

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

    Retrieving The Request URL

    Để lấy đầy đủ URL cho request gửi đến, 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ó query string, trong khi phương thức fullUrl bao gồm cả query string:

    // Without Query String...
    $url = $request->url();
    
    // With Query String...
    $url = $request->fullUrl();
    

    Retrieving The Request Method

    Phương thức method sẽ trả về phương thức HTTP tương ứng với request. Bạn có thể sử dụng phương thức isMethod để xác thực phương thức HTTP khớp với string:

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

    PSR-7 Requests là gì?

    Tiêu chuẩn của quy định interfaces cho HTTP messages, bao gồm cả requests và responses. Nếu bạn muốn lấy một instance của PSR-7 request thay vì một request Laravel, đầu tiên bạn sẽ cần cài đặt một vài thư viện. Laravel sử dụng component Symfony HTTP Message Bridge để chuyển đổi requests và responses của Laravel thành PSR-7:

    composer require symfony/psr-http-message-bridge
    composer require zendframework/zend-diactoros
    

    Khi bạn đã cài thư viện trên, bạn có thể lấy được PSR-7 request bằng cách type-hinting request interface trên route Closure hoặc phương thức controller:

    use Psr\Http\Message\ServerRequestInterface;
    
    Route::get('/', function (ServerRequestInterface $request) {
        //
    });
    

    Input Trimming và Normalization

    Theo mặc định, Laravel bao gồm TrimStringsConvertEmptyStringsToNull middleware trong global middleware stack của ứng dụng của bạn. Các middleware này được liệt kê trong ngăn xếp bởi lớp App\Http\Kernel. Các trình trung gian này sẽ tự động cắt tất cả các trường chuỗi đến theo yêu cầu, cũng như chuyển đổi bất kỳ trường chuỗi rỗng thành null. Điều này cho phép bạn không phải lo lắng về những mối quan tâm bình thường hóa trong các route và controller của bạn.

    Nếu bạn muốn vô hiệu hóa hành vi này, bạn có thể loại bỏ hai middleware khỏi middleware stack của ứng dụng bằng cách loại bỏ chúng khỏi thuộc tính $middleware của class App\Http\Kernel của bạn.

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    Kubernetes bài 6 - Vận hành k8s Day-Two Operations và Quản trị bằng GitOps

    22.05.2026

    Khi cụm Kubernetes của bạn đã được bảo mật cấu hình, tối ưu tài nguyên và thiết lập tự phục hồi, câu hỏi đặt ra là làm sao để duy trì sự ổn định đó trong nhiều năm tiếp theo mà không bị phụ thuộc

    thumbnail

    Kubernetes bài 5 - bảo mật Cloud Native và chuẩn DevSecOps cho K8s

    22.05.2026

    Việc siết chặt an ninh (Hardening) không phải là cấu hình một vài thông số rồi bỏ đó, mà là một tư duy phòng thủ chiều sâu.

    thumbnail

    Kubernetes bài 4 - Tối ưu Resource Auto-Healing và Scale Zero-Downtime

    22.05.2026

    Bài viết này sẽ đi sâu vào các cơ chế ở tầng Kernel giúp hệ thống tự phục hồi, chống lại các đợt tấn công cạn kiệt tài nguyên và cập nhật phiên bản mới mà người dùng không hề hay biết.

    thumbnail

    Kubernetes bài 3 - Bảo mật cấu hình k8s và config Security trên Production

    22.05.2026

    Kubernetes giải quyết bài toán này bằng hai đối tượng chuyên biệt nhưng nếu không hiểu rõ bản chất bảo mật ở tầng dưới, bạn đang tự tay dâng toàn bộ chìa khóa hệ thống cho hacker.

    thumbnail

    Kubernetes bài 2 - Mạng lưới k8s và luồng Traffic ở Packet Level

    22.05.2026

    Pod không chỉ là một container: Rất nhiều người nhầm lẫn Pod 1-1 với Container. Thực chất, Pod là đơn vị triển khai nhỏ nhất, có thể chứa một hoặc nhiều container

    Mục lục bài viết