Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 13: การใช้ Route Group และ Prefix

ใน Laravel การจัดกลุ่มเส้นทาง (Route Group) และการเพิ่ม Prefix เป็นเทคนิคที่ช่วยให้เราจัดการเส้นทางต่างๆ ในแอปพลิเคชันให้เป็นระบบระเบียบ และช่วยลดความซ้ำซ้อนของโค้ด โดยเฉพาะเมื่อมีเส้นทางที่มีรูปแบบคล้ายกัน หรือต้องการกำหนดเงื่อนไขเฉพาะ เช่น Middleware หรือ Namespace ให้กับกลุ่มเส้นทางนั้นๆ

การใช้ Route Group

Route Group ช่วยให้เราสามารถจัดกลุ่มเส้นทางที่ต้องการกำหนด Middleware หรือเงื่อนไขต่างๆ ร่วมกันได้ ตัวอย่างเช่น การกำหนด Middleware auth ให้กับเส้นทางที่ต้องการให้เฉพาะผู้ใช้ที่ล็อกอินเท่านั้นที่สามารถเข้าถึงได้

use App\Http\Controllers\UserController;

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', [UserController::class, 'dashboard']);
    Route::get('/profile', [UserController::class, 'profile']);
    Route::get('/settings', [UserController::class, 'settings']);
});

ในตัวอย่างข้างต้น เส้นทางทั้งหมดใน Group จะถูกกำหนด Middleware auth ซึ่งหมายความว่าผู้ใช้ต้องล็อกอินก่อนถึงจะสามารถเข้าถึง /dashboard, /profile, และ /settings ได้

การใช้ Prefix

Prefix คือการกำหนดคำนำหน้าให้กับ URL ของเส้นทางใน Route Group ซึ่งช่วยให้เส้นทางมีโครงสร้างที่เป็นระเบียบ เช่น การกำหนด URL สำหรับแผงควบคุม (Dashboard) หรือ URL ของ API

use App\Http\Controllers\AdminController;

Route::prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::get('/users', [AdminController::class, 'users']);
    Route::get('/settings', [AdminController::class, 'settings']);
});

ในตัวอย่างข้างต้น URL ของแต่ละเส้นทางจะมีคำนำหน้า admin เช่น:

  • /admin/dashboard
  • /admin/users
  • /admin/settings

การใช้ Route Group ร่วมกับ Prefix และ Middleware

เราสามารถใช้ Route Group เพื่อกำหนดเงื่อนไขหลายอย่างให้กับเส้นทางได้ เช่น การกำหนดทั้ง Middleware และ Prefix ให้กับกลุ่มเส้นทาง

use App\Http\Controllers\AdminController;

Route::middleware(['auth'])->prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::get('/users', [AdminController::class, 'users']);
    Route::get('/settings', [AdminController::class, 'settings']);
});

ในตัวอย่างนี้ กลุ่มเส้นทางทั้งหมดจะมี URL ที่ขึ้นต้นด้วย admin และทุกเส้นทางจะมี Middleware auth ซึ่งหมายความว่าผู้ใช้ต้องล็อกอินก่อนถึงจะสามารถเข้าถึงเส้นทางต่างๆ ที่อยู่ใน Group นี้ได้ เช่น:

  • /admin/dashboard
  • /admin/users
  • /admin/settings

การใช้ Namespace ใน Route Group

Namespace ใช้เพื่อระบุพื้นที่ของ Controller ที่เกี่ยวข้องกับกลุ่มเส้นทางนั้น โดยปกติใน Laravel รุ่นใหม่จะใช้วิธีเรียกแบบเต็ม เช่น AdminController::class ทำให้ไม่จำเป็นต้องใช้ Namespace แต่ในบางโปรเจคอาจต้องการกำหนด Namespace เฉพาะ ซึ่งสามารถกำหนดได้ดังนี้:

Route::namespace('App\Http\Controllers\Admin')->group(function () {
    Route::get('/dashboard', 'DashboardController@index');
    Route::get('/users', 'UserController@index');
});

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

Route Group และ Prefix ช่วยให้การจัดการเส้นทางใน Laravel ง่ายและสะดวกขึ้น โดยสามารถจัดกลุ่มเส้นทางที่ต้องการกำหนดเงื่อนไขต่างๆ ร่วมกัน เช่น Middleware, Prefix หรือ Namespace ซึ่งช่วยลดความซ้ำซ้อนในโค้ด และทำให้แอปพลิเคชันมีโครงสร้าง URL ที่สอดคล้องและเป็นระบบระเบียบมากขึ้น