Laravel - มิดเดิลแวร์
มิดเดิลแวร์ทำหน้าที่เป็นสะพานเชื่อมระหว่างคำขอและการตอบกลับ เป็นกลไกการกรองประเภทหนึ่ง บทนี้อธิบายกลไกมิดเดิลแวร์ใน Laravel
Laravel มีมิดเดิลแวร์ที่ใช้ตรวจสอบว่าผู้ใช้แอปพลิเคชันได้รับการรับรองความถูกต้องหรือไม่ หากผู้ใช้ได้รับการพิสูจน์ตัวตนผู้ใช้จะเปลี่ยนเส้นทางไปยังโฮมเพจมิฉะนั้นจะเปลี่ยนเส้นทางไปยังหน้าล็อกอิน
สามารถสร้างมิดเดิลแวร์ได้โดยดำเนินการคำสั่งต่อไปนี้ -
php artisan make:middleware <middleware-name>
แทนที่ <middleware-name>ด้วยชื่อมิดเดิลแวร์ของคุณ ตัวกลางที่คุณสร้างสามารถดูได้ที่app/Http/Middleware ไดเรกทอรี
ตัวอย่าง
สังเกตตัวอย่างต่อไปนี้เพื่อทำความเข้าใจกลไกตัวกลาง -
Step 1- ให้เราสร้าง AgeMiddleware ในการสร้างสิ่งนั้นเราต้องดำเนินการคำสั่งต่อไปนี้ -
php artisan make:middleware AgeMiddleware
Step 2 - หลังจากดำเนินการคำสั่งสำเร็จคุณจะได้รับผลลัพธ์ต่อไปนี้ -
Step 3 - AgeMiddleware จะถูกสร้างขึ้นที่ app/Http/Middleware. ไฟล์ที่สร้างขึ้นใหม่จะมีรหัสต่อไปนี้ที่สร้างไว้สำหรับคุณแล้ว
<?php
namespace App\Http\Middleware;
use Closure;
class AgeMiddleware {
public function handle($request, Closure $next) {
return $next($request);
}
}
การลงทะเบียนมิดเดิลแวร์
เราจำเป็นต้องลงทะเบียนทุกตัวกลางก่อนใช้งาน มี Middleware สองประเภทใน Laravel
- มิดเดิลแวร์ระดับโลก
- เส้นทางมิดเดิลแวร์
Global Middleware จะทำงานตามคำขอ HTTP ทุกรายการของแอปพลิเคชันในขณะที่ไฟล์ Route Middlewareจะถูกกำหนดให้กับเส้นทางเฉพาะ สามารถลงทะเบียนมิดเดิลแวร์ได้ที่app/Http/Kernel.php. ไฟล์นี้มีคุณสมบัติสองอย่าง $middleware และ $routeMiddleware. $middleware ใช้เพื่อลงทะเบียน Global Middleware และ $routeMiddleware คุณสมบัติถูกใช้เพื่อลงทะเบียนมิดเดิลแวร์เฉพาะเส้นทาง
ในการลงทะเบียนมิดเดิลแวร์ส่วนกลางให้แสดงรายการคลาสที่ส่วนท้ายของคุณสมบัติ $ มิดเดิลแวร์
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,
];
ในการลงทะเบียนมิดเดิลแวร์เฉพาะเส้นทางให้เพิ่มคีย์และค่าให้กับคุณสมบัติ $ routeMiddleware
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
ตัวอย่าง
เราได้สร้าง AgeMiddlewareในตัวอย่างก่อนหน้านี้ ตอนนี้เราสามารถลงทะเบียนได้ในคุณสมบัติมิดเดิลแวร์กำหนดเส้นทาง รหัสสำหรับการลงทะเบียนนั้นแสดงอยู่ด้านล่าง
ต่อไปนี้เป็นรหัสสำหรับ 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,
];
}
พารามิเตอร์มิดเดิลแวร์
เรายังสามารถส่งผ่านพารามิเตอร์ด้วยมิดเดิลแวร์ ตัวอย่างเช่นหากแอปพลิเคชันของคุณมีบทบาทที่แตกต่างกันเช่นผู้ใช้ผู้ดูแลระบบผู้ดูแลระบบขั้นสูงเป็นต้นและคุณต้องการตรวจสอบการดำเนินการตามบทบาทคุณสามารถทำได้โดยการส่งผ่านพารามิเตอร์ด้วยมิดเดิลแวร์ มิดเดิลแวร์ที่เราสร้างมีฟังก์ชันต่อไปนี้และเราสามารถส่งผ่านอาร์กิวเมนต์ที่กำหนดเองของเราได้หลังจากไฟล์$next การโต้เถียง.
public function handle($request, Closure $next) {
return $next($request);
}
ตัวอย่าง
Step 1 - สร้าง RoleMiddleware โดยดำเนินการคำสั่งต่อไปนี้ -
php artisan make:middleware RoleMiddleware
Step 2 - หลังจากดำเนินการสำเร็จคุณจะได้รับผลลัพธ์ต่อไปนี้ -
Step 3 - เพิ่มรหัสต่อไปนี้ในวิธีจัดการของ RoleMiddlewareat ที่สร้างขึ้นใหม่ 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 - ลงทะเบียน RoleMiddleware ใน app\Http\Kernel.phpไฟล์. เพิ่มบรรทัดที่ไฮไลต์ด้วยสีเทาในไฟล์นั้นเพื่อลงทะเบียน RoleMiddleware
Step 5 - ดำเนินการคำสั่งต่อไปนี้เพื่อสร้าง TestController -
php artisan make:controller TestController --plain
Step 6 - หลังจากดำเนินการตามขั้นตอนข้างต้นสำเร็จคุณจะได้รับผลลัพธ์ต่อไปนี้ -
Step 7 - คัดลอกโค้ดบรรทัดต่อไปนี้ไปที่ 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.";
}
}
Step 8 - เพิ่มบรรทัดของรหัสต่อไปนี้ใน app/Http/routes.php ไฟล์.
app/Http/routes.php
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
Step 9 - ไปที่ URL ต่อไปนี้เพื่อทดสอบ Middleware ด้วยพารามิเตอร์
http://localhost:8000/role
Step 10 - ผลลัพธ์จะปรากฏดังที่แสดงในภาพต่อไปนี้
มิดเดิลแวร์ที่ยุติได้
มิดเดิลแวร์ที่บอกเลิกได้จะทำงานบางอย่างหลังจากที่ส่งการตอบกลับไปยังเบราว์เซอร์ ซึ่งสามารถทำได้โดยการสร้างมิดเดิลแวร์ด้วยterminateวิธีการในมิดเดิลแวร์ มิดเดิลแวร์ที่ยกเลิกได้ควรลงทะเบียนกับมิดเดิลแวร์ระดับโลก เมธอด terminate จะได้รับสองอาร์กิวเมนต์$request และ $response. สามารถสร้างเมธอด Terminate ได้ดังแสดงในโค้ดต่อไปนี้
ตัวอย่าง
Step 1 - สร้าง TerminateMiddleware โดยดำเนินการคำสั่งด้านล่าง
php artisan make:middleware TerminateMiddleware
Step 2 - ขั้นตอนข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
Step 3 - คัดลอกรหัสต่อไปนี้ในสิ่งที่สร้างขึ้นใหม่ TerminateMiddleware ที่ 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 - ลงทะเบียนไฟล์ TerminateMiddleware ใน app\Http\Kernel.phpไฟล์. เพิ่มบรรทัดที่เน้นด้วยสีเทาในไฟล์นั้นเพื่อลงทะเบียน TerminateMiddleware
Step 5 - ดำเนินการคำสั่งต่อไปนี้เพื่อสร้าง ABCController.
php artisan make:controller ABCController --plain
Step 6 - หลังจากดำเนินการ URL สำเร็จคุณจะได้รับผลลัพธ์ต่อไปนี้ -
Step 7 - คัดลอกรหัสต่อไปนี้ไปที่ 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.";
}
}
Step 8 - เพิ่มบรรทัดของรหัสต่อไปนี้ใน app/Http/routes.php ไฟล์.
app/Http/routes.php
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'ABCController@index',
]);
Step 9 - ไปที่ URL ต่อไปนี้เพื่อทดสอบมิดเดิลแวร์ที่สามารถยุติได้
http://localhost:8000/terminate
Step 10 - ผลลัพธ์จะปรากฏดังที่แสดงในภาพต่อไปนี้