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ế <middleware-name> bằng 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ại thư mục app / Http / Middleware .
Thí dụ
Quan sát ví dụ sau để hiểu cơ chế phần mềm trung gian –
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 kết quả sau:
Bước 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ạ
<?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
Phần mềm trung gian toàn cầu sẽ chạy trên mọi yêu cầu HTTP của ứng dụng, trong khi Phần mềm trung gian tuyến sẽ được gán cho một tuyến đường cụ thể.
Phần mềm trung gian 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ý Phần mềm trung gian toàn cầu và thuộc tính $ routeMiddleware được sử dụng để đăng ký phần mềm trung gian cụ thể theo 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 = [
\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 AgeMiddleware trong 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ố 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ò, đ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 ta tạo chứa hàm sau và chúng ta 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 kết quả sau:
Bước 3 – Thêm mã sau vào phương thức xử lý của ứng dụng RoleMiddlewareat / Http / Middleware / RoleMiddleware.php mới được tạo .
<?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.
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 kết quả sau:
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 / route.php .
app / Http / route.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 thông số
http://localhost:8000/role
Bước 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ới phương thức chấm dứt trong 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 và $ 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ụ
Bước 1 – Tạo TerminaMiddleware bằng cách thực hiện lệnh dưới đây.
php artisan make:middleware TerminateMiddleware
Bước 2 – Bước trên sẽ tạo ra kết quả 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.";
}
}
Bước 4 – Đăng ký các TerminateMiddleware trong ứng dụng \ Http \ Kernel.php tập tin. Thêm dòng được đánh dấu bằng màu xám trong tệp đó để đăng ký TerminaMiddleware.
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 kết quả sau:
Bước 7 – Sao chép 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 / route.php .app / Http / route.php
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'ABCController@index',
]);
Bước 9 – Truy cập URL sau để kiểm tra Phần mềm Trung gian Terminable.
http://localhost:8000/terminate
Bước 10 – Đầu ra sẽ xuất hiện như trong hình sau.