Laravel - Phần mềm trung gian

Phần mềm trung gian hoạt động như một cầu nối giữa một yêu cầu và một phản hồi. Nó là một loại cơ chế lọc. Chương này giải thích cho bạn cơ chế phần mềm trung gian trong Laravel.

Laravel bao gồm một phần mềm trung gian xác minh xem người dùng của ứng dụng có được xác thực hay không. Nếu người dùng được xác thực, nó sẽ chuyển hướng đến trang chủ, nếu không, nó sẽ chuyển hướng đến trang đăng nhập.

Phần mềm trung gian có thể được tạo bằng cách thực hiện lệnh sau:

php artisan make:middleware <middleware-name>

Thay thế cái <middleware-name>với tên của phần mềm trung gian của bạn. Phần mềm trung gian mà bạn tạo có thể được nhìn thấy tạiapp/Http/Middleware danh mục.

Thí dụ

Quan sát ví dụ sau để hiểu cơ chế phần mềm trung gian -

Step 1- Bây giờ chúng ta hãy tạo AgeMiddleware. Để tạo điều đó, chúng ta cần thực hiện lệnh sau:

php artisan make:middleware AgeMiddleware

Step 2 - Sau khi thực hiện thành công lệnh, bạn sẽ nhận được kết quả sau:

Step 3 - AgeMiddleware sẽ được tạo tại app/Http/Middleware. Tệp mới tạo sẽ có mã sau đây đã được tạo cho bạn.

<?php

namespace App\Http\Middleware;
use Closure;

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

Đăng ký phần mềm trung gian

Chúng ta cần đăng ký từng phần mềm trung gian trước khi sử dụng nó. Có hai loại Middleware trong Laravel.

  • Phần mềm trung gian toàn cầu
  • Định tuyến phần mềm trung gian

Các Global Middleware sẽ chạy trên mọi yêu cầu HTTP của ứng dụng, trong khi Route Middlewaresẽ được chỉ định cho một lộ trình cụ thể. Phần mềm trung gian có thể được đăng ký tạiapp/Http/Kernel.php. Tệp này chứa hai thuộc tính $middleware$routeMiddleware. $middleware tài sản được sử dụng để đăng ký Phần mềm Trung gian Toàn cầu và $routeMiddleware tài sản được sử dụng để đăng ký phần mềm trung gian tuyến đường cụ thể.

Để đă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 = [
   \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   \Illuminate\Session\Middleware\StartSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,
];

Để đăng ký phần mềm trung gian cụ thể của 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,
   'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

Thí dụ

Chúng tôi đã tạo AgeMiddlewaretrong ví dụ trước. Bây giờ chúng ta có thể đăng ký nó trong thuộc tính phần mềm trung gian cụ thể. Mã cho đăng ký đó được hiển thị bên dưới.

Sau đây là mã cho app/Http/Kernel.php -

<?php

namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel {
   protected $middleware = [
      \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
      \Illuminate\Session\Middleware\StartSession::class,
      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
      \App\Http\Middleware\VerifyCsrfToken::class,
   ];
  
   protected $routeMiddleware = [
      'auth' => \App\Http\Middleware\Authenticate::class,
      'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
      'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
      'Age' => \App\Http\Middleware\AgeMiddleware::class,
   ];
}

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

Chúng tôi cũng có thể chuyển các tham số với 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ò, điều này có thể đạt được bằng cách chuyển các tham số với phần mềm trung gian. Phần mềm trung gian mà chúng tôi tạo chứa hàm sau và chúng tôi có thể chuyển đối số tùy chỉnh của mình sau$next tranh luận.

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

Thí dụ

Step 1 - Tạo RoleMiddleware bằng cách thực hiện lệnh sau:

php artisan make:middleware RoleMiddleware

Step 2 - Sau khi thực hiện thành công, bạn sẽ nhận được kết quả sau:

Step 3 - Thêm mã sau vào phương thức xử lý của RoleMiddlewareat mới được tạo app/Http/Middleware/RoleMiddleware.php.

<?php

namespace App\Http\Middleware;
use Closure;

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

Step 4 - Đăng ký RoleMiddleware trong app\Http\Kernel.phptập tin. Thêm dòng được đánh dấu bằng màu xám trong tệp đó để đăng ký RoleMiddleware.

Step 5 - Thực hiện lệnh sau để tạo TestController -

php artisan make:controller TestController --plain

Step 6 - Sau khi thực hiện thành công bước trên, bạn sẽ nhận được kết quả sau:

Step 7 - Sao chép các dòng mã sau vào app/Http/TestController.php tập tin.

app/Http/TestController.php

<?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.";
   }
}

Step 8 - Thêm dòng mã sau vào app/Http/routes.php tập tin.

app/Http/routes.php

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

Step 9 - Truy cập URL sau để kiểm tra Middleware với các thông số

http://localhost:8000/role

Step 10 - Đầu ra sẽ xuất hiện như trong hình sau.

Phần mềm trung gian chấm dứt

Phần mềm trung gian Terminable 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ể được thực hiện bằng cách tạo một phần mềm trung gian vớiterminatetrong phần mềm trung gian. Phần mềm trung gian kết thúc phải được đăng ký với phần mềm trung gian toàn cầu. Phương thức chấm dứt sẽ nhận được hai đối số$request$response. Phương thức kết thúc có thể được tạo như được hiển thị trong đoạn mã sau.

Thí dụ

Step 1 - Tạo TerminateMiddleware bằng cách thực hiện lệnh dưới đây.

php artisan make:middleware TerminateMiddleware

Step 2 - Bước trên sẽ tạo ra kết quả sau:

Step 3 - Sao chép đoạn mã sau vào đoạn mã mới tạo TerminateMiddleware tại app/Http/Middleware/TerminateMiddleware.php.

<?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.";
   }
}

Step 4 - Đăng ký TerminateMiddleware trong app\Http\Kernel.phptập tin. Thêm dòng được đánh dấu bằng màu xám trong tệp đó để đăng ký TerminaMiddleware.

Step 5 - Thực hiện lệnh sau để tạo ABCController.

php artisan make:controller ABCController --plain

Step 6 - Sau khi thực hiện thành công URL, bạn sẽ nhận được kết quả sau:

Step 7 - Sao chép mã sau vào app/Http/ABCController.php tập tin.

app/Http/ABCController.php

<?php

namespace App\Http\Controllers;

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

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

Step 8 - Thêm dòng mã sau vào app/Http/routes.php tập tin.

app/Http/routes.php

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

Step 9 - Truy cập URL sau để kiểm tra Phần mềm Trung gian Terminable.

http://localhost:8000/terminate

Step 10 - Đầu ra sẽ xuất hiện như trong hình sau.