Theme
Primary Color

تجميع ال Routes وتطبيق Middleware مشتركة عليها

كيف تجمع مجموعة من ال Routes التي تشترك في نفس ال Middleware لتقليل التكرار وتسهيل تعديل الكود

إذا كان لديك مجموعة من ال Routes الخاصة بإدارة المستخدمين مثلا

وكل Route تستخدم ال Middleware نفسها كما في الكود التالي

// Manage Users
Route::get('/admin/users', [AdminController::class, 'users'])->middleware('auth:admin')->name('admin.users');

// Add User Page
Route::get('/admin/users/add', [AdminController::class, 'addUser'])->middleware('auth:admin')->name('admin.users.add');

// Store User
Route::post('/admin/users', [AdminController::class, 'storeUser'])->middleware('auth:admin')->name('admin.users.store');

// Edit User Page
Route::get('/admin/users/{user}/edit', [AdminController::class, 'editUserForm'])->middleware('auth:admin')->name('admin.users.edit');

// Update User
Route::put('/admin/users/{user}', [AdminController::class, 'updateUser'])->middleware('auth:admin')->name('admin.users.update');

// Delete User
Route::delete('/admin/users/{user}', [AdminController::class, 'deleteUser'])->middleware('auth:admin')->name('admin.users.delete');

ستلاحظ تكرار الجزء التالي في كل Route

->middleware('auth:admin')

بدلا من كتابة نفس ال Middleware في كل مرة

يمكنك استخدام ال group Method لوضع هذه ال Routes داخل مجموعة واحدة 

وتطبيق ال Middleware على المجموعة بالكامل

Route::middleware(['auth:admin'])->group(function () {
  // Routes
});

أي Route تكتبها داخل هذه المجموعة ستطبق عليها ال Middleware المحددة 

ولذلك يمكنك إزالة middleware('auth:admin') من كل Route داخلها

وهنا ال Code كاملا بعد التجميع

Route::middleware(['auth:admin'])->group(function () {
  // Manage Users
  Route::get('/admin/users', [AdminController::class, 'users'])->name('admin.users');

  // Add User Page
  Route::get('/admin/users/add', [AdminController::class, 'addUser'])->name('admin.users.add');

  // Store User
  Route::post('/admin/users', [AdminController::class, 'storeUser'])->name('admin.users.store');

  // Edit User Page
  Route::get('/admin/users/{user}/edit', [AdminController::class, 'editUserForm'])->name('admin.users.edit');

  // Update User
  Route::put('/admin/users/{user}', [AdminController::class, 'updateUser'])->name('admin.users.update');

  // Delete User
  Route::delete('/admin/users/{user}', [AdminController::class, 'deleteUser'])->name('admin.users.delete');
});

الآن جميع ال Routes الموجودة داخل المجموعة تستخدم auth:admin 

وإذا احتجت لتغيير ال Middleware المشتركة يمكنك تعديلها في مكان واحد


التجميع لا يغير روابط ال Routes أو أسماءها أو وظائفها 

وكل Route تظل مستقلة لكننا جمعنا الإعداد المشترك بينها لتقليل التكرار وتسهيل الصيانة

framework laravel learn middleware routes