Các bài viết

Phần mềm trung gian của Laravel hoạt động như thế nào

Phần mềm trung gian của Laravel là một lớp ứng dụng trung gian can thiệp giữa yêu cầu của người dùng và phản hồi của ứng dụng.

Điều này có nghĩa là khi người dùng (Laravel view) đưa ra yêu cầu đến máy chủ (Laravel controller), yêu cầu sẽ đi qua phần mềm trung gian. Bằng cách này, phần mềm trung gian có thể kiểm tra xem yêu cầu có được xác thực hay không: 

  • nếu yêu cầu của người dùng được xác thực, yêu cầu sẽ được gửi đến phần phụ trợ;
  • nếu yêu cầu của người dùng không được xác thực, phần mềm trung gian sẽ chuyển hướng người dùng đến màn hình đăng nhập.

Laravel cho phép bạn defikết thúc và sử dụng phần mềm trung gian bổ sung để thực hiện nhiều tác vụ ngoại trừ xác thực. 

Các phần mềm trung gian của Laravel, chẳng hạn như xác thực và bảo vệ CSRF, nằm trong thư mục ứng dụng/Http/Phần mềm trung gian .

Do đó, chúng tôi có thể nói rằng phần mềm trung gian là bộ lọc yêu cầu http, qua đó có thể xác minh các điều kiện và thực hiện các hành động.

Tạo phần mềm trung gian

Để tạo một phần mềm trung gian mới, chúng tôi chạy lệnh sau:

php artisan make:middleware <name-of-middleware>

chúng tôi tạo ra middleware và chúng tôi gọi nó là CheckAge, artisan sẽ trả lời chúng tôi như sau:

Cửa sổ trên cho thấy phần mềm trung gian đã được tạo thành công với tên ” kiểm tra tuổi ".

Để xem phần mềm trung gian CheckAge đã được tạo hay chưa, hãy vào dự án trong thư mục app/Http/Middleware và bạn sẽ thấy tệp mới được tạo

Tệp mới tạo có mã sau

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Sử dụng phần mềm trung gian

Để sử dụng phần mềm trung gian, chúng ta cần phải đăng ký nó.

Có hai loại phần mềm trung gian trong Laravel:

  • Middleware globale
  • Route Middleware

Il phần mềm trung gian toàn cầu sẽ được thực hiện trên mọi yêu cầu HTTP từ ứng dụng, trong khi Định tuyến phần mềm trung gian sẽ được gán cho một đường dẫn cụ thể. Phần mềm trung gian có thể được đăng ký tại ứng dụng/Http/Kernel.php. Tệp này chứa hai thuộc tính phần mềm trung gian $ e $routeMiddleware . Thuộc tính $middleware được sử dụng để đăng ký quyền sở hữu và phần mềm trung gian toàn cầu $routeMiddleware được sử dụng để đăng ký phần mềm trung gian dành riêng cho tuyến đường.

Để đăng ký phần mềm trung gian toàn cầu, hãy liệt kê lớp ở cuối thuộc tính $middleware.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Để đăng ký phần mềm trung gian dành riêng cho tuyến đường, hãy thêm khóa và giá trị vào thuộc tính $routeMiddleware.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Chúng tôi tạo ra kiểm tra tuổi trong ví dụ trước. Bây giờ chúng ta có thể đăng ký điều này trong thuộc tính tuyến đường phần mềm trung gian. Mã cho một đăng ký như vậy được hiển thị dưới đây.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Thông số phần mềm trung gian

Chúng ta cũng có thể truyền tham số bằng Middleware. 

Ví dụ: nếu ứng dụng của bạn có các vai trò khác nhau như người dùng, quản trị viên, quản trị viên cấp cao, v.v. và bạn muốn xác thực hành động dựa trên vai trò, bạn có thể thực hiện bằng cách chuyển các tham số bằng phần mềm trung gian. 

Phần mềm trung gian mà chúng tôi đã tạo chứa chức năng sau và chúng tôi có thể chuyển các đối số tùy chỉnh sau đối số $tiếp theo .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Bây giờ, hãy thử đặt tham số vai trò cho một phần mềm trung gian mới mà chúng ta sẽ tạo từ đầu, sau đó tiến hành tạo Phần mềm trung gian vai trò bằng cách chạy lệnh sau

Sửa đổi phương thức xử lý như sau

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

chúng tôi đã thêm tham số $role, và bên trong phương thức dòng echo để viết đầu ra tên của vai trò.

Bản tin đổi mới
Đừng bỏ lỡ những tin tức quan trọng nhất về đổi mới. Đăng ký để nhận chúng qua email.

Bây giờ hãy đăng ký phần mềm trung gian RoleMiddleware cho một đường dẫn cụ thể

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Bây giờ để kiểm tra phần mềm trung gian với tham số, chúng ta cần tạo một yêu cầu và phản hồi. Để mô phỏng phản hồi, hãy tạo bộ điều khiển mà chúng ta sẽ gọi là TestController

php artisan make:controller TestController --plain

lệnh vừa thực hiện sẽ tạo một bộ điều khiển mới bên trong thư mục app/Http/TestController.php, và thay đổi phương pháp index với dòng echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

Sau khi thiết lập phản hồi, chúng tôi xây dựng yêu cầu bằng cách chỉnh sửa tệp routes.phpbằng cách thêm route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

tại thời điểm này, chúng ta có thể thử ví dụ bằng cách truy cập URL http://localhost:8000/role

và trong trình duyệt, chúng ta sẽ thấy hai echo

Role editor
Test Controller

Phần mềm trung gian có thể chấm dứt

Il terminable Middleware thực hiện một số tác vụ sau khi phản hồi được gửi đến trình duyệt. Điều này có thể đạt được bằng cách tạo một phần mềm trung gian với phương thức chấm dứt trong phần mềm trung gian. Il terminable Middleware phải được đăng ký với middleware toàn cầu. phương pháp terminate sẽ nhận được hai đối số $ yêu cầu e phản hồi $. 

Phương pháp Terminate phải được tạo như trong đoạn mã sau.

php artisan make:middleware TerminateMiddleware

Khi phần mềm trung gian được tạo app/Http/Middleware/TerminateMiddleware.php hãy sửa đổi mã như sau

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

trong trường hợp này chúng ta có một phương pháp handle và một phương pháp terminate với hai thông số $request e $response.

Bây giờ hãy đăng ký Middleware

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Bây giờ chúng ta cần tạo bộ điều khiển để mô phỏng phản hồi

php artisan make:controller XYZController --plain

sửa đổi nội dung của lớp

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Bây giờ chúng ta cần chỉnh sửa tệp routes/web.php thêm các tuyến đường cần thiết để kích hoạt yêu cầu

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

tại thời điểm này, chúng ta có thể thử ví dụ bằng cách truy cập URL http://localhost:8000/terminate

và trong trình duyệt, chúng ta sẽ thấy những dòng sau

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Bạn cũng có thể thích:

Bản tin đổi mới
Đừng bỏ lỡ những tin tức quan trọng nhất về đổi mới. Đăng ký để nhận chúng qua email.

Bài viết gần đây

Sự can thiệp sáng tạo vào thực tế tăng cường, với người xem Apple tại Phòng khám đa khoa Catania

Một ca phẫu thuật tạo hình mắt bằng cách sử dụng trình xem thương mại Apple Vision Pro đã được thực hiện tại Phòng khám đa khoa Catania…

3 May 2024

Lợi ích của việc tô màu cho trẻ em - thế giới kỳ diệu dành cho mọi lứa tuổi

Phát triển kỹ năng vận động tinh thông qua tô màu giúp trẻ chuẩn bị cho những kỹ năng phức tạp hơn như viết. Để tô màu…

2 May 2024

Tương lai là đây: Ngành vận tải biển đang cách mạng hóa nền kinh tế toàn cầu như thế nào

Ngành hải quân là một cường quốc kinh tế toàn cầu thực sự, đang hướng tới thị trường 150 tỷ...

1 May 2024

Các nhà xuất bản và OpenAI ký thỏa thuận điều chỉnh luồng thông tin được Trí tuệ nhân tạo xử lý

Thứ Hai tuần trước, Financial Times đã công bố một thỏa thuận với OpenAI. FT cấp phép cho hoạt động báo chí đẳng cấp thế giới…

30 tháng tư 2024

Đọc Đổi mới bằng ngôn ngữ của bạn

Bản tin đổi mới
Đừng bỏ lỡ những tin tức quan trọng nhất về đổi mới. Đăng ký để nhận chúng qua email.

Theo chúng tôi