تجميع ال 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 تظل مستقلة لكننا جمعنا الإعداد المشترك بينها لتقليل التكرار وتسهيل الصيانة