با عرض سلام خدمت کاربران عزیز سایت پی وی لرن و کاربرانی که دوره کامل آموزش لاراول را دنبال می کنند، در هنگام طراحی سایت یا برنامه نویسی سیستمهای تحت وب، مسیرهای متعددی در آن پیادهسازی میشود. پیش از اجرای این مسیرها یا نشانیهای وب، لازم است تا فعالیتها یا بررسیهایی صورت پذیرد. برای مثال ممکن است برای برخی از مسیرها، بررسی شود که آیا کاربر وارد سیستم شده است یا خیر و برای برخی دیگر از مسیرها بررسی شود که آیا کاربر وارد شده به سیستم دسترسی مدیریت دارد یا خیر. Middleware در لاراول ابزارهایی هستند که انجام فعالیتهای تکراری پیش از پاسخگویی به درخواستهای کاربران را مدیریت میکنند. بدون استفاده از مکانیسم middleware ، کدهای تکراری میبایست پیش از پاسخگویی به درخواستها نوشته شوند.
Middleware به عنوان یک پل، بین درخواست و پاسخ عمل می کند. این یک نوع مکانیزم فیلتر است این جلسه مکانیسم middleware را در Laravel توضیح می دهد.
Laravel شامل یک میان افزار است که تأیید می کند که آیا کاربر برنامه تأیید شده است یا خیر. اگر کاربر تأیید شود، به صفحه اصلی هدایت می شود در غیر این صورت، اگر نه، آن را به صفحه، ورود به صفحه هدایت می کند.
Middleware را می توان با اجرای دستور زیر ایجاد کرد.
1 | php artisan make:middleware <middleware-name> |
<middleware-name> را با نام middleware خود جایگزین کنید.
میان افزاری که ایجاد می کنید می توانید در دایرکتوری app / Http / Middleware مشاهده کنید.
برای درک مکانیزم میان افزار به مثال زیر توجه کنید.
مرحله ۱ : اکنون AgeMiddleware را ایجاد کنید. برای ایجاد این، ما باید دستور زیر را اجرا کنیم.
1 | php artisan make:middleware AgeMiddleware |
مرحله ۲ : پس از اجرای موفق فرمان، خروجی زیر را دریافت خواهید کرد.
مرحله ۳ : AgeMiddleware در برنامه / Http / Middleware ایجاد خواهد شد. فایل جدید ایجاد شده دارای کد زیر است که قبلا برای شما ایجاد شده است.
1 2 3 4 5 6 7 8 9 10 | <?php namespace App\Http\Middleware; use Closure; class AgeMiddleware { public function handle($request, Closure $next) { return $next($request); } } |
ما باید قبل از استفاده از هر یک از میان افزار ها ثبت نام کنیم. در Laravel دو نوع middleware وجود دارد.
۱- میان افزار جهانی
۲-مسیر میان افزار
Middleware جهانی در هر درخواست HTTP از برنامه اجرا می شود، در حالی که Middleware مسیر، به یک مسیر خاص اختصاص داده می شود.
middleware را می توان در برنامه / Http / Kernel.php ثبت نام کرد.
این فایل حاوی دو ویژگی $ middleware و $ routeMiddleware است.
ویژگی middleware $ برای ثبت نام میان افزار جهانی استفاده می شود. و ویژگی $routeMiddleware برای ثبت نام مسیر خاص middleware استفاده می شود.
برای ثبت نام middleware جهانی، کلاس را در انتهای ویژگی middleware لیست کنید.
1 2 3 4 5 6 7 8 | protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ]; |
برای ثبت نام میان افزار خاص مسیر، کلید و ارزش را به property $ routeMiddleware اضافه کنید.
1 2 3 4 5 | protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ]; |
ما AgeMiddleware را در مثال قبلی ایجاد کرده ایم.
ما اکنون می توانیم آن را در میان افزار خاص مسیر middleware ثبت نام کنیم. کد آن ثبت نام در زیر نشان داده شده است.
کد زیر برای برنامه / Http / Kernel.php زیر است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'Age' => \App\Http\Middleware\AgeMiddleware::class, ]; } |
ما همچنین می توانیم پارامترها را با مکانیسم Middleware منتقل کنیم.
به عنوان مثال، اگر برنامه شما دارای نقش های مختلف مانند کاربر، مدیر، مدیر فوق و غیره باشد و شما می خواهید بر اساس آن نقش را تأیید کنید، با عبور از پارامترها با Middleware در لاراول می توانید این کار را انجام دهید.
مکانیسم Middleware در لاراول که ما ایجاد می کنیم حاوی تابع زیر است و می توانیم بعد از استدلال $ آرگومان بعدی دلخواهمان را منتقل کنیم.
1 2 3 | public function handle($request, Closure $next) { return $next($request); } |
مرحله ۱ : با اجرای دستور زیر، RoleMiddleware را ایجاد کنید.
1 | php artisan make:middleware RoleMiddleware |
مرحله ۲ : بعد از اجرای موفق، خروجی زیر را دریافت خواهید کرد.
مرحله ۳ : کد زیر را به روش دسته جدید RoleMiddlewareat ایجاد کنید.
برنامه / Http / Middleware / RoleMiddleware.php.
1 2 3 4 5 6 7 8 9 10 11 | <?php namespace App\Http\Middleware; use Closure; class RoleMiddleware { public function handle($request, Closure $next, $role) { echo "Role: ".$role; return $next($request); } } |
مرحله ۴ : RoleMiddleware را در پرونده \ Http \ Kernel.php ثبت کنید.
برای ثبت نام RoleMiddleware، خط برجسته رنگ خاکستری را در آن فایل اضافه کنید.
مرحله ۵ : برای ایجاد TestController دستور زیر را اجرا کنید.
1 | php artisan make:controller TestController --plain |
مرحله ۶ : پس از اجرای موفقیت آمیز گام فوق، خروجی زیر را دریافت خواهید کرد.
مرحله ۷ : خطوط زیر کد را در پرونده / Http / TestController.php کپی کنید.
app/Http/TestController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?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."; } } |
مرحله ۸ : کد خط زیر را در فایل app / Http / routes.php اضافه کنید.
app/Http/routes.php
1 2 3 4 | Route::get('role',[ 'middleware' => 'Role:editor', 'uses' => 'TestController@index', ]); |
مرحله ۹ : برای تست Middleware در لاراول با پارامترهایش، URL زیر را ببینید.
1 | http://localhost:8000/role |
مرحله ۱۰ : خروجی به صورت زیر نمایش داده می شود.
پس از ارسال پاسخ به مرورگر، یک میان افزار خاتمه مییابد.
این می تواند با ایجاد یک middleware با روش خاتمه در middleware انجام شود.
middleware termin باید با middleware جهانی ثبت شود.
روش خاتمه، دو استدلال response$ و request$ را دریافت خواهد کرد.
روش متوقف کردن را می توان به عنوان کد در زیر نشان داد.
مثال
مرحله ۱: ایجاد TerminateMiddleware با اجرای دستور زیر.
1 | php artisan make:middleware TerminateMiddleware |
مرحله ۲ : مرحله بالا خروجی زیر را تولید می کند.
مرحله ۳ : کد زیر را در TerminateMiddleware جدید کپی کنید.
app/Http/Middleware/TerminateMiddleware.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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."; } } |
مرحله ۴ : ثبت TerminateMiddleware در برنامه \ Http \ Kernel.php فایل.
برای ثبت TerminateMiddleware، خطی را که در رنگ خاکستری برجسته شده است، اضافه کنید.
مرحله ۵ : برای ایجاد ABCController دستور زیر را اجرا کنید.
1 | php artisan make:controller ABCController --plain |
مرحله ۶ : اجرای موفق URL، خروجی زیر را دریافت خواهید کرد.
مرحله ۷ : کد زیر را به پرونده / Http / ABCController.php کپی کنید.
app/Http/ABCController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ABCController extends Controller { public function index() { echo "<br>ABC Controller."; } } |
مرحله ۸ : کد خط زیر را در فایل app / Http / routes.php اضافه کنید.
app/Http/routes.php
1 2 3 4 | Route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'ABCController@index', ]); |
مرحله ۹ : برای آزمایش Middleware Terminable از URL زیر دیدن کنید.
1 | http://localhost:8000/terminate |
مرحله ۱۰ : خروجی به صورت زیر نمایش داده می شود.
درخواستهای HTTP جز جداییناپذیر یک برنامه تحت وب هستند، برای مدیریت و فیلتر کردن درخواستهای ورودی در لاراول از middlewareها استفاده میکنیم.لاراول شامل یک middleware است که بوسیله آن میتوان مشخص کرد که کاربر برنامه به درستی احراز هویت شده است یا خیر. اگر کاربر تایید نشده باشد، middleware کاربر را دوباره به صفحه ورود به سایت (Login) هدایت میکند. ولی اگر کاربر تأیید هویت شده باشد، middleware به درخواست اجازه میدهد تا به برنامه وارد شده و عملیات دیگری را نیز انجام دهد. در ادامه بیشتر به middleware در لاراول میپردازیم.