بخش سوم - میدلورها - قسمت اول
میدلورها در لاراول مکانیزمی مناسب برای بررسی و فیلتر کردن درخواستهای 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