به این معنی که وقتی کاربر (نمایش لاراول) درخواستی را به سرور (کنترل کننده لاراول) می دهد، درخواست از میان افزار عبور می کند. به این ترتیب میان افزار می تواند بررسی کند که آیا درخواست احراز هویت شده است یا خیر:
لاراول به شما این امکان را می دهد defiتکمیل و استفاده از میان افزار اضافی برای انجام انواع کارها به جز احراز هویت.
میان افزارهای لاراول، مانند احراز هویت و حفاظت CSRF، در دایرکتوری قرار دارند برنامه/Http/Middleware .
بنابراین می توان گفت که میان افزار یک فیلتر درخواست http است که از طریق آن می توان شرایط را تأیید کرد و اقدامات را انجام داد.
برای ایجاد یک میان افزار جدید دستور زیر را اجرا می کنیم:
php artisan make:middleware <name-of-middleware>
ما ایجاد می کنیم middleware
و ما آن را صدا می زنیم CheckAge
, artisan
به ما به صورت زیر پاسخ خواهد داد:
پنجره بالا نشان می دهد که میان افزار با موفقیت با نام " ایجاد شده است. CheckAge ".
برای اینکه ببینید میان افزار CheckAge ایجاد شده است یا خیر، به پروژه در پوشه app/Http/Middleware بروید و فایل جدید ایجاد شده را مشاهده خواهید کرد.
فایل جدید ایجاد شده دارای کد زیر است
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
برای استفاده از میان افزار، باید آن را ثبت کنیم.
دو نوع میان افزار در لاراول وجود دارد:
Middleware globale
Route Middleware
Il میان افزار جهانی در هر درخواست HTTP از برنامه اجرا خواهد شد، در حالی که Route Middleware به یک مسیر خاص اختصاص داده خواهد شد. میان افزار را می توان در ثبت نام کرد app/Http/Kernel.php. این فایل دارای دو ویژگی است میان افزار $ e $routeMiddleware . ویژگی $middleware برای ثبت میان افزار جهانی و مالکیت استفاده می شود $routeMiddleware برای ثبت میان افزار مخصوص مسیر استفاده می شود.
برای ثبت جهانی میانافزار، کلاس را در انتهای ویژگی $middleware فهرست کنید.
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
برای ثبت میان افزار مخصوص مسیر، کلید و مقدار را به ویژگی $routeMiddleware اضافه کنید.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
ما ایجاد کردیم CheckAge در مثال قبلی اکنون میتوانیم این را در ویژگی مسیر میانافزار ثبت کنیم. کد چنین ثبت نامی در زیر نشان داده شده است.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
];
ما همچنین می توانیم پارامترها را با Middleware ارسال کنیم.
به عنوان مثال، اگر برنامه شما دارای نقش های مختلفی مانند کاربر، مدیر، سوپر ادمین و غیره است. و شما می خواهید اکشن را بر اساس نقش تأیید کنید، می توانید آن را با عبور پارامترها با میان افزار انجام دهید.
میان افزاری که ایجاد کردیم حاوی تابع زیر است و می توانیم آرگومان های سفارشی را بعد از آرگومان ارسال کنیم $ بعدی .
public function handle($request, Closure $next)
{
return $next($request);
}
حالا بیایید سعی کنیم پارامتر role را روی یک میان افزار جدید که قرار است از ابتدا ایجاد کنیم، تنظیم کنیم، سپس با اجرای دستور زیر به ایجاد Role Middleware ادامه دهیم.
روش دسته را به صورت زیر تغییر دهید
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
پارامتر را اضافه کردیم $role
، و در داخل متد خط echo
برای نوشتن خروجی نام نقش.
حال اجازه دهید میان افزار RoleMiddleware را برای یک مسیر خاص ثبت کنیم
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
];
حال برای تست میان افزار با پارامتر، باید یک درخواست و یک پاسخ ایجاد کنیم. برای شبیه سازی پاسخ، اجازه دهید کنترلری را ایجاد کنیم که آن را TestController می نامیم
php artisan make:controller TestController --plain
دستوری که به تازگی اجرا شده است یک کنترلر جدید در داخل پوشه ایجاد می کند app/Http/TestController.php
، و روش را تغییر دهید index
با خط echo "<br>Test Controller.";
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
پس از تنظیم پاسخ، درخواست را با ویرایش فایل ایجاد می کنیم routes.php
با اضافه کردن route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
در این مرحله میتوانیم با مراجعه به URL مثال را امتحان کنیم http://localhost:8000/role
و در مرورگر ما این دو را خواهیم دید echo
Role editor
Test Controller
Il terminable Middleware
برخی از وظایف را پس از ارسال پاسخ به مرورگر انجام می دهد. این را می توان با ایجاد یک میان افزار با روش به دست آورد در میان افزار خاتمه یابد. Il terminable Middleware
باید با middleware
جهانی است. روش terminate
دو آرگومان دریافت خواهد کرد درخواست $ e $response.
روش Terminate
باید مطابق کد زیر ایجاد شود.
php artisan make:middleware TerminateMiddleware
زمانی که میان افزار ایجاد شد app/Http/Middleware/TerminateMiddleware.php
بیایید کد را به صورت زیر تغییر دهیم
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
در این مورد ما یک روش داریم handle
و یک روش terminate
با دو پارامتر $request
e $response
.
حال بیایید Middleware را ثبت کنیم
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
];
حال باید یک کنترلر برای شبیه سازی پاسخ ایجاد کنیم
php artisan make:controller XYZController --plain
اصلاح محتویات کلاس
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
حالا باید فایل را ویرایش کنیم routes/web.php
اضافه کردن مسیرهای مورد نیاز برای فعال کردن درخواست
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
در این مرحله میتوانیم با مراجعه به URL مثال را امتحان کنیم http://localhost:8000/terminate
و در مرورگر خطوط زیر را مشاهده خواهیم کرد
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
همچنین ممکن است دوست داشته باشید:
یک عمل جراحی چشم با استفاده از نمایشگر تجاری Apple Vision Pro در پلی کلینیک کاتانیا انجام شد…
توسعه مهارت های حرکتی ظریف از طریق رنگ آمیزی، کودکان را برای مهارت های پیچیده تری مانند نوشتن آماده می کند. رنگ کردن…
بخش دریایی یک قدرت واقعی اقتصادی جهانی است که به سمت یک بازار 150 میلیاردی حرکت کرده است.
دوشنبه گذشته، فایننشال تایمز از قراردادی با OpenAI خبر داد. FT مجوز روزنامه نگاری در سطح جهانی خود را صادر می کند…