مارک پلاس

تکنولوژی نوین اینترنتی

Route Groups و Middleware در لاراول

دسته‌بندی‌ها

Route Groups و Middleware در لاراول
Route Groups و Middleware در لاراول

در لاراول، Route Groups و Middleware ابزارهای قدرتمندی برای سازماندهی و محافظت از مسیرهای شما هستند. با استفاده از آن‌ها می‌تونید مسیرهای تکراری رو خلاصه کنید، امنیت مسیرها رو افزایش بدید، و کد تمیزتری داشته باشید.


✅ فصل ۱: Route Groups چیست؟

Route Group به شما اجازه می‌دهد مجموعه‌ای از مسیرها را با تنظیمات مشترک مانند:

  • prefix (/admin, /api)

  • middleware

  • namespace (در نسخه‌های قبل از لاراول 8)

گروه‌بندی کنید.


🔹 مثال ساده: گروه‌بندی با prefix

php
Route::prefix('admin')->group(function () { Route::get('/dashboard', function () { return 'Admin Dashboard'; }); Route::get('/users', function () { return 'Admin Users'; }); });

🟢 مسیرهای بالا:

  • /admin/dashboard

  • /admin/users


✅ فصل ۲: استفاده از Middleware در Route Group

Middleware برای فیلتر کردن درخواست‌ها قبل از رسیدن به کنترلر استفاده می‌شود. مثلا: احراز هویت، بررسی نقش کاربر، بررسی نرخ درخواست‌ها، و...

🔹 تعریف گروه با middleware:

php
Route::middleware(['auth'])->group(function () { Route::get('/dashboard', function () { return 'کاربر وارد شده است'; }); Route::get('/profile', function () { return 'پروفایل کاربر'; }); });

فقط کاربران احراز هویت‌شده می‌تونن این مسیرها رو ببینن.


🔹 ترکیب prefix و middleware:

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

✅ فصل ۳: تعریف Middleware سفارشی

گام ۱: ساخت middleware

bash
php artisan make:middleware IsAdmin

گام ۲: پیاده‌سازی

php
// app/Http/Middleware/IsAdmin.php public function handle($request, Closure $next) { if (auth()->check() && auth()->user()->role === 'admin') { return $next($request); } abort(403, 'شما دسترسی ندارید.'); }

گام ۳: ثبت در app/Http/Kernel.php

php
protected $routeMiddleware = [ // ... 'is_admin' => \App\Http\Middleware\IsAdmin::class, ];

✅ فصل ۴: استفاده در مسیر تکی

اگر نخواهید گروه بسازید، می‌تونید middleware رو روی یک مسیر خاص هم قرار بدید:

php
Route::get('/settings', [UserController::class, 'settings'])->middleware('auth');

✅ فصل ۵: Route Group با namespace (در لاراول 7 یا قبل)

php
Route::namespace('Admin')->prefix('admin')->group(function () { Route::get('/users', 'UserController@index'); });

در لاراول 8 به بعد باید namespace را به صورت کامل در کنترلر بنویسید:

php
use App\Http\Controllers\Admin\UserController; Route::prefix('admin')->group(function () { Route::get('/users', [UserController::class, 'index']); });

✅ فصل ۶: Route Group در فایل‌های api.php و web.php

در routes/api.php:

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

در routes/web.php:

php
Route::middleware(['auth'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']); });

✅ نتیجه‌گیری

مفهومکاربرد
Route Groupسازماندهی مسیرها با تنظیمات مشترک
Middlewareمحافظت و فیلتر کردن مسیرها
ترکیب آن‌هاتمیز نگه داشتن کد و افزایش امنیت

اگر خواستی یک مثال عملی مثل پنل مدیریت با middleware نقش‌ها بسازم، فقط بگو 🌟

محتوای مرتبط

پست‌های مرتبط