Middleware คืออะไร?
Middleware ใน Laravel เป็นส่วนที่ทำหน้าที่เป็นตัวกลางระหว่างคำขอ (Request) และการตอบสนอง (Response) โดยสามารถตรวจสอบ แก้ไข หรือกรองคำขอก่อนที่จะถึง Controller หรือส่งกลับไปยังผู้ใช้ ตัวอย่างการใช้งาน Middleware เช่น การตรวจสอบว่าผู้ใช้ล็อกอินแล้วหรือยัง, การตรวจสอบสิทธิ์การเข้าถึง, การป้องกันคำขอจากแหล่งที่ไม่น่าเชื่อถือ เป็นต้น
Laravel มี Middleware พื้นฐานที่ติดตั้งมาให้ เช่น:
auth
– ตรวจสอบว่าผู้ใช้ล็อกอินหรือยังguest
– ตรวจสอบว่าผู้ใช้ยังไม่ได้ล็อกอินverified
– ตรวจสอบว่าผู้ใช้ยืนยันอีเมลแล้วหรือยัง
การสร้าง Middleware ใน Laravel
เราสามารถสร้าง Middleware ใหม่ได้โดยใช้คำสั่ง Artisan make:middleware
ตามด้วยชื่อ Middleware ที่ต้องการ เช่น:
1 | php artisan make :middleware CheckAdmin |
คำสั่งนี้จะสร้างไฟล์ CheckAdmin.php
ในโฟลเดอร์ app/Http/Middleware/
ซึ่งเป็นตำแหน่งที่เก็บ Middleware ทั้งหมดใน Laravel
ตัวอย่างการเขียน Middleware
ตัวอย่างการสร้าง Middleware เพื่อเช็คสิทธิ์ของผู้ใช้ว่าเป็นผู้ดูแลระบบหรือไม่ (เช่น มีสถานะ is_admin
เป็น true
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class CheckAdmin { public function handle(Request $request , Closure $next ) { if (Auth::check() && Auth::user()->is_admin) { return $next ( $request ); // ส่งคำขอไปยัง Controller ต่อไป } return redirect( '/' ); // ถ้าไม่ใช่ admin ให้กลับไปหน้าแรก } } |
ในตัวอย่างนี้ Middleware จะตรวจสอบว่า:
- ผู้ใช้ล็อกอินหรือยัง (
Auth::check()
) - สถานะของผู้ใช้เป็นผู้ดูแลระบบ (
Auth::user()->is_admin
)
หากผู้ใช้ผ่านเงื่อนไขทั้งสองอย่าง คำขอจะถูกส่งไปยัง Controller ต่อไป แต่ถ้าไม่ผ่าน Middleware จะส่งผู้ใช้กลับไปยังหน้าแรก (/
)
การลงทะเบียน Middleware
หลังจากสร้าง Middleware แล้ว เราจำเป็นต้องลงทะเบียน Middleware นี้ในไฟล์ app/Http/Kernel.php
โดยสามารถเพิ่ม Middleware ในส่วนของ $routeMiddleware
ได้ ดังนี้:
1 2 3 4 | protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate:: class , 'checkAdmin' => \App\Http\Middleware\CheckAdmin:: class , ]; |
การเพิ่มใน $routeMiddleware
ทำให้สามารถเรียกใช้ Middleware นี้ใน Route ได้โดยการใช้ชื่อ checkAdmin
การนำ Middleware ไปใช้งานใน Route
เมื่อเราลงทะเบียน Middleware แล้ว สามารถนำไปใช้งานใน Route โดยการระบุชื่อ Middleware ในการกำหนดเส้นทาง เช่น:
1 2 3 | use App\Http\Controllers\AdminController; Route::get( '/admin' , [AdminController:: class , 'index' ])->middleware( 'checkAdmin' ); |
ในตัวอย่างนี้ เมื่อมีผู้ใช้เข้าถึง URL /admin
ระบบจะตรวจสอบว่าเป็นผู้ดูแลระบบหรือไม่ ถ้าไม่ใช่จะถูกส่งกลับไปยังหน้าแรก
นอกจากนี้ สามารถนำไปใช้กับ Route Group ได้ เช่น:
1 2 3 4 | Route::middleware([ 'checkAdmin' ])->group( function () { Route::get( '/admin' , [AdminController:: class , 'index' ]); Route::get( '/admin/settings' , [AdminController:: class , 'settings' ]); }); |
ในตัวอย่างนี้ Route ภายใน Group จะถูกตรวจสอบว่าเป็นผู้ดูแลระบบหรือไม่ก่อนที่จะอนุญาตให้เข้าถึง
การนำไปใช้งาน
Middleware ช่วยให้การจัดการการเข้าถึงของผู้ใช้งานเป็นไปอย่างมีระบบ และยังช่วยกรองคำขอจากผู้ใช้ ทำให้แอปพลิเคชันปลอดภัยมากขึ้น โดยสามารถใช้งานร่วมกับ Route หรือ Controller เพื่อควบคุมสิทธิ์และประมวลผลก่อนการเข้าถึงข้อมูลสำคัญ