TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #58 797
فصل یک - Routing

بخش سوم - میدلورها - قسمت اول


میدلور‌ها در لاراول مکانیزمی مناسب برای بررسی و فیلتر کردن درخواست‌های HTTP ورودی به برنامه شما فراهم می‌کنند.

به عنوان مثال، لاراول یک میدلور دارد که بررسی می‌کند آیا کاربر وارد سیستم شده است یا خیر. اگر کاربر وارد نشده باشد، او را به صفحه ورود هدایت می‌کند. اما اگر وارد شده باشد، درخواست را به مسیر بعدی هدایت می‌کند.

لاراول شامل میدلورهای متنوعی از جمله تأیید هویت و حفاظت CSRF است.

همچنین کاربر می تواند میدلور های خود را بنویسد، تمامی میدلورهای تعریف شده توسط کاربر معمولاً در مسیر app/Http/Middleware قرار می‌گیرند.

ساخت میدلور اختصاصی:

برای ساخت میدلور اختصاصی، از دستور زیر در ترمینال استفاده کنید:
php artisan make:middleware {MiddlewareName}


این دستور یک میدلور با نام داده شده در مسیر app/Http/Middleware ایجاد می‌کند.

تمامی عملیات بررسی در متد handle انجام می‌شود. می‌توانید شروطی را بر روی درخواست‌ها اعمال کنید. در صورتی که شروط برقرار باشند، متد handle میدلور بعدی را فراخوانی می‌کند و درخواست را ادامه می‌دهد. در غیر این صورت، درخواست متوقف و نتیجه تغییر خواهد کرد. مثال:
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckAge
{
public function handle(Request $request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

اگر سن کاربر کمتر یا مساوی ۱۸ باشد، به صفحه خانه هدایت می‌شود. در غیر این صورت، درخواست ادامه پیدا می‌کند.

ثبت میدلور:

برای استفاده از یک میدلور اختصاصی، ابتدا باید آن را در برنامه خود ثبت کنید. برای این کار وارد فایل bootstrap/app.php شوید و دنبال بخش زیر بگردید:
->withMiddleware(function (Middleware $middleware) {
//
})


برای ثبت میدلور جدید، می‌توانید متد append را از $middleware صدا بزنید و نام میدلور را به صورت کامل به آن پاس بدهید:
->withMiddleware(function (Middleware $middleware) {
$middleware->append(CheckAge::class);
})


همچنین می‌توانید یک نام مستعار برای میدلور خود ثبت کنید تا ساده‌تر به آن دسترسی داشته باشید:
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'age' => CheckAge::class
]);
})


با سایر متد قابل دسترس از $middleware در قسمت بعدی آشنا می شویم.

استفاده از میدلور در مسیرها:

برای اعمال یک میدلور بر روی route ها با متد جدیدی از فساد Route آشنا می شویم:
Route::get('profile', function () {
// Only executed if age > 18
})->middleware(CheckAge::class);

// Or use alias:
Route::get('profile', function () {
// Only executed if age > 18
})->middleware('age');


متد middleware یک یا چند میدلور را بر روی یک مسیر اعمال می‌کند و در صورتی که شروط میدلور برقرار باشد، مسیر اجرا خواهد شد. در مثال ما، تنها در صورتی که سن بیشتر از ۱۸ باشد، مسیر اجرا خواهد شد.

غیرفعال کردن میدلور برای مسیرها:

متد دیگری از فساد Route با نام withoutMiddleware نیز در دسترس است که میدلور های داده شده را بر روی مسیر مورد نظر اجرا نخواهد کرد:
Route::withoutMiddleware([CheckAge::class])->group(function () {
Route::get('/profile', function () {
// ...
});
});


ارسال پارامتر به میدلور
:

می‌توانید پارامترهایی را به میدلور خود اختصاص دهید:
Route::get('profile', function () {
// Only executed if age > 20
})->middleware('age:20');


پارامترهای ورودی را می‌توانید در متد handle دریافت کنید:
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckAge
{
public function handle(Request $request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}


در مثال بالا، یک میدلور داینامیک ایجاد کرده‌ایم که می‌توانیم هر سنی را به واسطه آن بررسی کنیم.

همچنین می توانید پارامتر های بیشتری را ارسال و دریافت کنید:
Route::get('profile', function () {

})->middleware('age:20,gt');


و همینطور در متد handle:
class CheckAge
{
public function handle(Request $request, Closure $next, $minAge, $type)
{
//
}
}


🔖 #Laravel, #PHP, #لاراول, #فصل_۱

👤 AmirHossein

💎 Channel: @DevelopixLaravel
  • 👍 7
  • 🔥 3
  • ❤ 2
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 &rlm;LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →