نسخه:

میان افزار HTTP

معرفی

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

البته، میان‌افزار را می‌توان برای انجام کارهای مختلفی علاوه بر احراز هویت، نوشت. یک میان افزار CORS ممکن است مسئول اضافه کردن هدرهای مناسب به تمام پاسخ هایی باشد که برنامه شما را ترک می کنند. یک میان‌افزار ثبت‌نام ممکن است تمام درخواست‌های دریافتی را به برنامه شما ثبت کند.

چندین میان‌افزار در چارچوب لاراول گنجانده شده است، از جمله میان‌افزار برای نگهداری، احراز هویت، حفاظت CSRF و موارد دیگر. همه این میان افزارها در app/Http/Middleware دایرکتوری قرار دارند.

تعریف میان افزار

برای ایجاد یک میان افزار جدید، از make:middleware دستور Artisan استفاده کنید:

php artisan make:middleware OldMiddleware

OldMiddleware این دستور یک کلاس جدید را در دایرکتوری شما قرار می دهد app/Http/Middleware . در این میان‌افزار، ما فقط در صورتی اجازه دسترسی به مسیر را می‌دهیم که مقدار ارائه‌شده age بیشتر از 200 باشد. در غیر این صورت، کاربران را به URI "خانه" هدایت می‌کنیم.

<?php namespace App\Http\Middleware;
 
use Closure;
 
class OldMiddleware {
 
/**
* Run the request filter.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->input('age') < 200)
{
return redirect('home');
}
 
return $next($request);
}
 
}

همانطور که می بینید، اگر مقدار داده شده age کمتر از باشد 200 ، میان افزار یک تغییر مسیر HTTP را به مشتری برمی گرداند. در غیر این صورت، درخواست بیشتر به برنامه ارسال می شود. برای ارسال درخواست عمیق تر به برنامه (اجازه دادن به میان افزار برای "عبور")، کافی است $next با استفاده از $request .

بهتر است میان‌افزار را به‌عنوان یک سری از درخواست‌های HTTP «لایه‌ها» تصور کنید که قبل از ورود به برنامه شما باید از آن عبور کنند. هر لایه می تواند درخواست را بررسی کند و حتی آن را به طور کامل رد کند.

قبل / بعد از میان افزار

اینکه یک میان افزار قبل یا بعد از درخواست اجرا شود به خود میان افزار بستگی دارد. این میان افزار قبل از رسیدگی به درخواست توسط برنامه، وظایفی را انجام می دهد :

<?php namespace App\Http\Middleware;
 
use Closure;
 
class BeforeMiddleware implements Middleware {
 
public function handle($request, Closure $next)
{
// Perform action
 
return $next($request);
}
}

با این حال، این میان افزار پس از رسیدگی به درخواست توسط برنامه، وظیفه خود را انجام می دهد:

<?php namespace App\Http\Middleware;
 
use Closure;
 
class AfterMiddleware implements Middleware {
 
public function handle($request, Closure $next)
{
$response = $next($request);
 
// Perform action
 
return $response;
}
}

ثبت نرم افزار میانی

میان افزار جهانی

اگر می خواهید یک میان افزار در طول هر درخواست HTTP برای برنامه شما اجرا شود، به سادگی کلاس میان افزار را در ویژگی کلاس $middleware خود فهرست کنید app/Http/Kernel.php .

اختصاص نرم افزار میانی به مسیرها

اگر می‌خواهید میان‌افزار را به مسیرهای خاصی اختصاص دهید، ابتدا باید میان‌افزار را یک کلید کوتاه در app/Http/Kernel.php فایل خود اختصاص دهید. به طور پیش فرض، $routeMiddleware ویژگی این کلاس حاوی ورودی هایی برای میان افزار موجود در لاراول است. برای اضافه کردن خود، کافی است آن را به این لیست اضافه کنید و کلید دلخواه خود را به آن اختصاص دهید.

هنگامی که میان افزار در هسته HTTP تعریف شد، می توانید از middleware کلید در آرایه گزینه های مسیر استفاده کنید:

Route::get('admin/profile', ['middleware' => 'auth', function()
{
//
}]);

میان افزار پایان پذیر

گاهی اوقات ممکن است پس از ارسال پاسخ HTTP به مرورگر، یک میان افزار نیاز به انجام کارهایی داشته باشد. به عنوان مثال، میان‌افزار «session» همراه با لاراول، داده‌های جلسه را پس از ارسال پاسخ به مرورگر در فضای ذخیره‌سازی می‌نویسد. برای انجام این کار، می توانید میان افزار را به عنوان "پایان پذیر" تعریف کنید.

use Closure;
use Illuminate\Contracts\Routing\TerminableMiddleware;
 
class StartSession implements TerminableMiddleware {
 
public function handle($request, Closure $next)
{
return $next($request);
}
 
public function terminate($request, $response)
{
// Store the session data...
}
 
}

همانطور که می بینید، علاوه بر تعریف handle متد، متد را TerminableMiddleware نیز تعریف کنید terminate . این روش هم درخواست و هم پاسخ را دریافت می کند. هنگامی که یک میان افزار پایان پذیر تعریف کردید، باید آن را به لیست میان افزارهای جهانی در هسته HTTP خود اضافه کنید.