تسلط بر سفارش اجرای میان افزار در لاراول 12

Middleware Laravel یک مکانیسم مناسب برای فیلتر کردن درخواست های HTTP برای ورود به برنامه شما فراهم می کند. از تأیید اعتبار گرفته تا حفاظت از CSRF ، میان افزار به عنوان نگهبانان برنامه شما عمل می کند ، و اطمینان از درخواست ها قبل از رسیدن به منطق کسب و کار شما ، معیارهای خاص را رعایت می کند.
در Laravel 12 ، ترتیب اجرای Middleware می تواند برنامه شما را ایجاد یا خراب کند. این مقاله به اعماق زیر می رود:
- سفارش اجرای نرم افزار
- پارامترهای میانی
- واسطه قابل خاتمه
- مدیریت پشته جهانی میان افزار
بیایید به هنر میان افزار تسلط کنیم.
درک سفارش اجرای میان افزار
Middleware در Laravel به ترتیب ثبت شده اجرا می شود.
Route::get('/profile', function () {
// Your route logic
})->middleware(['auth', 'verified', 'log-activity']);
در این مثال:
-
auth
وسط ظروف اول اجرا می شود. - پس
verified
بشر - و بالاخره
log-activity
بشر
مرتب سازی میان افزار در لاراول 12
بعضی اوقات ، شما به میانه وسایل نیاز دارید تا به ترتیب خاصی اجرا کنید – صرف نظر از نحوه اختصاص آنها به مسیرها. لاراول 12 معرفی می کند priority
در bootstrap/app.php
:
->withMiddleware(function (Middleware $middleware) {
$middleware->priority([
\App\Http\Middleware\ImportantFirstMiddleware::class,
\App\Http\Middleware\MustRunSecondMiddleware::class,
\App\Http\Middleware\ThirdInLineMiddleware::class,
// Add more in the order you need
]);
});
چه زمانی از اولویت میانی استفاده کنید
از آن استفاده کنید وقتی:
- یک میان افزار به دیگری بستگی دارد
- شما می خواهید یک دستور اجرای مداوم جهانی
- شما زنجیرهای میان افزار پیچیده ای با وابستگی دارید
مثال در دنیای واقعی: برنامه چند مستاجر
فرض کنید شما در حال ساخت یک برنامه چند مستاجر با میان افزار زیر هستید:
-
IdentifyTenant
: تشخیص می دهد که درخواست متعلق به کدام مستاجر است -
SetupTenantDatabase
: پایگاه داده را سوئیچ می کند -
ApplyTenantTheme
: سبک های UI را سفارشی می کند
سفارش اعدام ضروری است:
->withMiddleware(function (Middleware $middleware) {
$middleware->priority([
\App\Http\Middleware\IdentifyTenant::class,
\App\Http\Middleware\SetupTenantDatabase::class,
\App\Http\Middleware\ApplyTenantTheme::class,
]);
});
چه اتفاقی می افتد بدون مرتب سازی مناسب؟
انتظار:
- ویژگی های شکسته
- ناسازگاری داده ها
- شکافهای امنیتی
- تخریب عملکرد
پارامترهای میانی
Laravel اجازه می دهد تا پارامترهای پویا دریافت کند.
مثال: بررسی اشتراک
class RequireSubscription
{
public function handle(Request $request, Closure $next, string $level): Response
{
$user = $request->user();
if (!$user || !$user->hasSubscription($level)) {
return response()->json([
'error' => 'This feature requires a ' . ucfirst($level) . ' subscription',
'upgrade_url' => route('subscriptions.upgrade'),
], 403);
}
return $next($request);
}
}
استفاده
Route::get('/premium-content', fn () => 'Premium!')->middleware('subscription:premium');
نحو مبتنی بر کلاس
Route::get('/analytics-dashboard', fn () => 'Analytics!')
->middleware(RequireSubscription::class.':business');
پارامتر چندگانه
Route::get('/developer-tools', fn () => 'Dev tools')
->middleware('subscription:premium,business');
مثال در دنیای واقعی: فیلتر محتوای مبتنی بر سن
class ContentFilter
{
public function handle(Request $request, Closure $next, int $minimumAge = 13, bool $skipWarning = false): Response
{
$user = $request->user();
$userAge = $user?->age;
if (!$userAge || $userAge < $minimumAge) {
if ($skipWarning) {
return redirect()->route('content.restricted');
}
session(['intended_url' => $request->fullUrl()]);
return redirect()->route('content.warning', [
'minimum_age' => $minimumAge,
]);
}
return $next($request);
}
}
استفاده
Route::get('/forums')->middleware('content.filter');
Route::get('/mature-content')->middleware('content.filter:18,true');
Route::get('/teen-content')->middleware('content.filter:16,false');
میانی واسطه قابل پایان: پس از قلاب های پاسخ
پس از ارسال پاسخ آیا باید منطق را اجرا کنید؟ از میان افزار خاتمه یافته استفاده کنید.
مثال: مشاهده صفحه نمایش
class TrackPageViews
{
public function handle(Request $request, Closure $next): Response
{
return $next($request);
}
public function terminate(Request $request, Response $response): void
{
if ($request->ajax() || $response->getStatusCode() !== 200 || $request->method() !== 'GET') {
return;
}
DB::table('page_views')->insert([
'path' => $request->path(),
'user_id' => $request->user()?->id,
'user_agent' => $request->userAgent(),
'ip_address' => $request->ip(),
'viewed_at' => now(),
]);
}
}
به عنوان Singleton ثبت نام کنید
public function register(): void
{
$this->app->singleton(\App\Http\Middleware\TrackPageViews::class);
}
موارد استفاده
- ورود به سیستم
- اعزام مشاغل
- کارهای پاکسازی
- نظارت بر عملکرد
مدیریت میان افزار جهانی لاراول
میان افزار جهانی را می توان در پیکربندی کرد bootstrap/app.php
بشر
تنظیم پشته جهانی سفارشی
->withMiddleware(function (Middleware $middleware) {
$middleware->use([
\Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class,
\Illuminate\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Http\Middleware\ValidatePostSize::class,
\Illuminate\Foundation\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
// Add your custom global middleware here
]);
});
واسطه را جایگزین کنید
$middleware->web(replace: [
\Illuminate\Session\Middleware\StartSession::class => \App\Http\Middleware\CustomSessionHandler::class,
]);
واسطه را بردارید
$middleware->web(remove: [
\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class,
]);
بهترین روشها برای میان افزار
- دستور اجرای واضح را حفظ کنید
- میانه را به صورت یک منظوره نگه دارید
- میانی نرم افزار مرتبط با گروه منطقی
- بهینه سازی عملکرد
- استثنائات را با لطف انجام دهید
- زنجیرهای میانی را کاملاً آزمایش کنید
پایان
درک و کنترل اجرای میانی در Laravel 12 برای برنامه های SCEAL و Secure ضروری است. این که آیا شما در حال دستیابی به تأیید اعتبار ، محلی سازی یا منطق مستاجر هستید ، میانی نرم افزار هم انعطاف پذیری و قدرت را به شما می دهد.
تسلط priority()
روش ، میانی واسطه پارامتری و وسط نرم افزار خاتمه یافته به شما در ساخت برنامه های قوی تر و قابل پیش بینی کمک می کند.
یک استراتژی میان افزار به خوبی طراحی شده منجر به کد پاک تر ، عملکرد بهتر و اشکالات کمتری می شود.