Home Tutorial Laravel Laravel – Bài 5: Middleware

Laravel – Bài 5: Middleware

17 min read
0
209

Middleware hoạt động như một cầu nối giữa yêu cầu và 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ế Middleware trong Laravel.

Laravel bao gồm một Middleware 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.

Middleware có thể được tạo bằng cách thực hiện lệnh sau :

php artisan make:middleware <middleware-name>

Thay <middleware-name> bằng tên 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ại thư mục app/Http/Middleware .

Thí dụ

Quan sát ví dụ sau để hiểu cơ chế của Middleware:

Bước 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

Bước 2 – Sau khi thực hiện thành công lệnh, bạn sẽ nhận được đầu ra sau :

TuổiMiddleware

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

<?php

namespace App\Http\Middleware;
use Closure;

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

Đăng ký Middleware

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

  • Global Middleware
  • Route Middleware

Global Middleware sẽ chạy trên mọi yêu cầu HTTP của ứng dụng, trong khi Route Middleware sẽ được chỉ định cho một tuyến cụ thể. Middleware có thể được đăng ký tại app/Http/Kernel.php. Tệp này chứa hai thuộc tính $middleware và $routeMiddleware . Thuộc tính $middleware được sử dụng để đăng ký Global Middleware và thuộc tính $routeMiddleware được sử dụng để đăng ký Middleware gian cụ thể của Route .

Để đăng ký phần Global Middleware, 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 Middleware cụ thể của Router, 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 AgeMiddleware trong ví dụ trước. Bây giờ chúng ta có thể đăng ký nó trong thuộc tính Middleware cụ thể của Router. 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,
   ];
}

Tham số phần mềm trung gian

Chúng ta cũng có thể truyền 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 tham số bằng Middleware. Middleware mà chúng tôi tạo chứa chức năng sau và chúng tôi có thể chuyển đối số tùy chỉnh của mình sau đối số $next .

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

Thí dụ

Bước 1 – Tạo RoleMiddleware bằng cách thực hiện lệnh sau –

php artisan make:middleware RoleMiddleware

Bước 2 – Sau khi thực hiện thành công, bạn sẽ nhận được đầu ra sau –

Tham số phần mềm trung gian

Bước 3 – Thêm mã sau vào phương thức xử lý của ứng dụng RoleMiddlewareat mới được tạo/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);
   }
}

Bước 4 – Đăng ký RoleMiddleware trong tệp app\Http\Kernel.php . Thêm dòng được đánh dấu bằng màu xám trong tệp đó để đăng ký RoleMiddleware.

Vai tròMiddleware

Bước 5 – Thực hiện lệnh sau để tạo TestController –

php artisan make:controller TestController --plain

Bước 6 – Sau khi thực hiện thành công bước trên, bạn sẽ nhận được đầu ra sau –

kiểm tra bộ điều khiển

Bước 7 – Sao chép các dòng mã sau vào tệp app/Http/TestController.php .

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

Bước 8 – Thêm dòng mã sau vào tệp app/Http/routes.php .

app/Http/routes.php

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

Bước 9 – Truy cập URL sau để kiểm tra Middleware với các tham số

http://localhost:8000/role

Bước 10 – Đầu ra sẽ xuất hiện như trong hình dưới đây.

Biên tập vai trò

Terminable Middleware

Middleware có thể kết thúc thực hiện một số tác vụ sau khi phản hồi đã được gửi tới 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ới phương thức kết thúc trong phần mềm trung gian. Phần mềm trung gian có thể kết thúc phải được đăng ký với phần Global Middleware. Phương thức kết thúc sẽ nhận được hai đối số $request và $response. Phương thức kết thúc có thể được tạo như trong đoạn mã sau.

Thí dụ

Bước 1 – Tạo TerminateMiddleware bằng cách thực hiện lệnh bên dưới.

php artisan make:middleware TerminateMiddleware

Bước 2 – Bước trên sẽ tạo ra đầu ra sau –

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

Bước 3 – Sao chép mã sau vào TerminateMiddleware mới được tạo 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.";
   }
}

Bước 4 – Đăng ký TerminateMiddleware trong tệp app\Http\Kernel.php . Thêm dòng được đánh dấu bằng màu xám trong tệp đó để đăng ký TerminateMiddleware.

Chấm dứtMiddleware

Bước 5 – Thực hiện lệnh sau để tạo ABCController .

php artisan make:controller ABCController --plain

Bước 6 – Sau khi thực hiện thành công URL, bạn sẽ nhận được đầu ra sau –

Bộ điều khiển ABC

Bước 7 – Sao chép đoạn mã sau vào tệp app/Http/ABCController.php .

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

Bước 8 – Thêm dòng mã sau vào tệp app/Http/routes.php .

app/Http/routes.php

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

Bước 9 – Truy cập URL sau để kiểm tra Middleware có thể kết thúc.

http://localhost:8000/terminate

Bước 10 – Đầu ra sẽ xuất hiện như trong hình dưới đây.

Bộ điều khiển ABC

Load More Related Articles
Load More By quangvu
  • Laravel – Bài 11: Error Handling

    Hầu hết các ứng dụng web đều có cơ chế cụ thể để xử lý lỗi. Bằng cách sử dụng chúng, họ th…
  • Laravel – Bài 16 Authentication (xác thực)

    Xác thực là quá trình xác định thông tin đăng nhập của người dùng. Trong các ứng dụng web,…
  • Laravel – Bài 15: Session

    Session được sử dụng để lưu trữ thông tin về người dùng trong các yêu cầu. Laravel cung cấ…
Load More In Laravel

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…