Office.in.th
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

Middleware คืออะไรและการนำไปใช้

Middleware ใน Laravel เป็นส่วนที่ทำหน้าที่เป็นตัวกลางระหว่างคำขอ (Request) และการตอบสนอง (Response) โดยสามารถตรวจสอบ แก้ไข หรือกรองคำขอก่อนที่จะถึง Controller ห...

Middleware คืออะไร?

Middleware ใน Laravel เป็นส่วนที่ทำหน้าที่เป็นตัวกลางระหว่างคำขอ (Request) และการตอบสนอง (Response) โดยสามารถตรวจสอบ แก้ไข หรือกรองคำขอก่อนที่จะถึง Controller หรือส่งกลับไปยังผู้ใช้ ตัวอย่างการใช้งาน Middleware เช่น การตรวจสอบว่าผู้ใช้ล็อกอินแล้วหรือยัง, การตรวจสอบสิทธิ์การเข้าถึง, การป้องกันคำขอจากแหล่งที่ไม่น่าเชื่อถือ เป็นต้น

Laravel มี Middleware พื้นฐานที่ติดตั้งมาให้ เช่น:

  • auth - ตรวจสอบว่าผู้ใช้ล็อกอินหรือยัง
  • guest - ตรวจสอบว่าผู้ใช้ยังไม่ได้ล็อกอิน
  • verified - ตรวจสอบว่าผู้ใช้ยืนยันอีเมลแล้วหรือยัง

การสร้าง Middleware ใน Laravel

เราสามารถสร้าง Middleware ใหม่ได้โดยใช้คำสั่ง Artisan make:middleware ตามด้วยชื่อ Middleware ที่ต้องการ เช่น:

php artisan make:middleware CheckAdmin

คำสั่งนี้จะสร้างไฟล์ CheckAdmin.php ในโฟลเดอร์ app/Http/Middleware/ ซึ่งเป็นตำแหน่งที่เก็บ Middleware ทั้งหมดใน Laravel

ตัวอย่างการเขียน Middleware

ตัวอย่างการสร้าง Middleware เพื่อเช็คสิทธิ์ของผู้ใช้ว่าเป็นผู้ดูแลระบบหรือไม่ (เช่น มีสถานะ is_admin เป็น true)

<?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 จะตรวจสอบว่า:

  1. ผู้ใช้ล็อกอินหรือยัง (Auth::check())
  2. สถานะของผู้ใช้เป็นผู้ดูแลระบบ (Auth::user()->is_admin)

หากผู้ใช้ผ่านเงื่อนไขทั้งสองอย่าง คำขอจะถูกส่งไปยัง Controller ต่อไป แต่ถ้าไม่ผ่าน Middleware จะส่งผู้ใช้กลับไปยังหน้าแรก (/)

การลงทะเบียน Middleware

หลังจากสร้าง Middleware แล้ว เราจำเป็นต้องลงทะเบียน Middleware นี้ในไฟล์ app/Http/Kernel.php โดยสามารถเพิ่ม Middleware ในส่วนของ $routeMiddleware ได้ ดังนี้:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'checkAdmin' => \App\Http\Middleware\CheckAdmin::class,
];

การเพิ่มใน $routeMiddleware ทำให้สามารถเรียกใช้ Middleware นี้ใน Route ได้โดยการใช้ชื่อ checkAdmin

การนำ Middleware ไปใช้งานใน Route

เมื่อเราลงทะเบียน Middleware แล้ว สามารถนำไปใช้งานใน Route โดยการระบุชื่อ Middleware ในการกำหนดเส้นทาง เช่น:

use App\Http\Controllers\AdminController;

Route::get('/admin', [AdminController::class, 'index'])->middleware('checkAdmin');

ในตัวอย่างนี้ เมื่อมีผู้ใช้เข้าถึง URL /admin ระบบจะตรวจสอบว่าเป็นผู้ดูแลระบบหรือไม่ ถ้าไม่ใช่จะถูกส่งกลับไปยังหน้าแรก

นอกจากนี้ สามารถนำไปใช้กับ Route Group ได้ เช่น:

Route::middleware(['checkAdmin'])->group(function () {
    Route::get('/admin', [AdminController::class, 'index']);
    Route::get('/admin/settings', [AdminController::class, 'settings']);
});

ในตัวอย่างนี้ Route ภายใน Group จะถูกตรวจสอบว่าเป็นผู้ดูแลระบบหรือไม่ก่อนที่จะอนุญาตให้เข้าถึง

การนำไปใช้งาน

Middleware ช่วยให้การจัดการการเข้าถึงของผู้ใช้งานเป็นไปอย่างมีระบบ และยังช่วยกรองคำขอจากผู้ใช้ ทำให้แอปพลิเคชันปลอดภัยมากขึ้น โดยสามารถใช้งานร่วมกับ Route หรือ Controller เพื่อควบคุมสิทธิ์และประมวลผลก่อนการเข้าถึงข้อมูลสำคัญ

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์