آموزش Middleware در لاراول
آموزش Middleware در لاراول
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش Middleware در لاراول خواهیم پرداخت.
Middleware به عنوان پل ارتباطی بین درخواست و پاسخ عمل می کند. این یک نوع مکانیسم فیلتر است. این فصل مکانیسم middleware در لاراول را برای شما توضیح می دهد.
لاراول شامل یک میان افزار است که تأیید می کند آیا کاربر برنامه معتبر است یا خیر. اگر کاربر احراز هویت شود، به صفحه اصلی هدایت می شود، در غیر این صورت، به صفحه ورود هدایت می شود.
Middleware را می توان با اجرای دستور زیر ایجاد کرد –
1 |
php artisan make: middleware <middleware-name> |
<middleware-name> را با نام middleware خود جایگزین کنید. middleware ایجاد شده را می توانید در فهرست برنامه/Http/Middleware مشاهده کنید.
مثال
برای درک مکانیزم middleware به مثال زیر توجه کنید –
مرحله 1 – اجازه دهید ما AgeMiddleware را ایجاد کنیم. برای ایجاد آن ما باید دستور زیر را اجرا کنیم –
1 |
php artisan make:middleware AgeMiddleware |
مرحله 2 – پس از اجرای موفقیت آمیز فرمان خروجی زیر را دریافت خواهید کرد –
مرحله 3 – 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); } } |
Middleware ثبت شده
ما باید قبل از استفاده از هر یک از Middleware آن را ثبت کنیم. در لاراول دو نوع Middleware وجود دارد.
- Middleware جهانی
Middleware مسیر
Middleware جهانی بر روی هر درخواست HTTP برنامه اجرا می شود، در حالی که Middleware مسیر به یک مسیر خاص اختصاص داده می شود. Middleware را می توان در برنامه/Http/Kernel.php ثبت کرد. این فایل شامل دو ویژگی middleware$ و routeMiddleware$ است. از ویژگی middleware $برای ثبت جهانی Middleware و از ویژگی routeMiddleware$ برای ثبت میان افزارهای خاص مسیر استفاده می شود.
برای ثبت جهانی 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, ]; |
برای ثبت Middleware مخصوص مسیر، کلید و مقدار را به ویژگی 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 route خاص ثبت کنیم. کد ثبت نام در زیر نشان داده شده است.
کد زیر برای app/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 به دست می آید. middleware ایجاد شده شامل تابع زیر است و می توانیم آرگومان سفارشی خود را بعد از آرگومان next$ منتقل کنیم.
1 2 3 |
public function handle($request, Closure $next) { return $next($request); } |
مثال
مرحله 1 – با اجرای دستور زیر RoleMiddleware را ایجاد کنید –
1 |
php artisan make: middleware RoleMiddleware |
مرحله 2 – پس از اجرای موفق، خروجی زیر را دریافت خواهید کرد –
مرحله 3 – کد زیر را در روش دسته بندی برنامه جدید 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); } } |
مرحله 4 – فایل RoleMiddleware را در برنامه \ Http \ Kernel.php ثبت کنید. خط ثبت شده با رنگ خاکستری را در آن فایل اضافه کنید تا RoleMiddleware را ثبت کنید.
مرحله 5 – دستور زیر را برای ایجاد TestController اجرا کنید –
1 |
php artisan make: controller TestController --plain |
مرحله 6 – پس از اجرای موفقیت آمیز مرحله بالا، خروجی زیر را دریافت خواهید کرد –
مرحله 7 – خطوط کد زیر را در فایل app/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."; } } |
مرحله 8 – خط زیر را در فایل app/Http/route.php اضافه کنید.
app/Http/route.php
1 2 3 4 |
Route::get('role',[ 'middleware' => 'Role:editor', 'uses' => 'TestController@index', ]); |
مرحله 9 – از URL زیر دیدن کنید تا Middleware را با پارامترها آزمایش کنید
1 |
http://localhost:8000/role |
مرحله 10 – خروجی مطابق تصویر زیر ظاهر می شود.
Terminable Middleware
پس از ارسال پاسخ به مرورگر، Terminable Middlewareبرخی از وظایف را انجام می دهد. این را می توان با ایجاد یک middleware با روش terminate در middleware انجام داد. Terminable Middleware باید با Middleware جهانی ثبت شوند. روش خاتمه دو آرگومان request$ و reply$ دریافت می کند. روش خاتمه را می توان مانند کد زیر نشان داد.
مثال
مرحله 1 – با اجرای دستور زیر TerminateMiddleware ایجاد کنید.
1 |
php artisan make:middleware TerminateMiddleware |
مرحله 2 – مرحله بالا خروجی زیر را تولید می کند –
مرحله 3 – کد زیر را در 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."; } } |
مرحله 4 – فایل TerminateMiddleware را در برنامه \ Http \ Kernel.php ثبت کنید. خط ثبت شده با رنگ خاکستری را در آن فایل اضافه کنید تا TerminateMiddleware را ثبت کنید.
مرحله 5 – دستور زیر را برای ایجاد ABCController اجرا کنید.
1 |
php artisan make: controller ABCController --plain |
مرحله 6 – پس از اجرای موفق URL، خروجی زیر را دریافت خواهید کرد –
مرحله 7 – کد زیر را در فایل 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."; } } |
مرحله 8 – خط زیر را در فایل app/Http/route.php اضافه کنید.
app/Http/route.php
1 2 3 4 |
Route::get('terminate',[ 'middleware' => 'terminate', 'uses' => 'ABCController@index', ]); |
مرحله 9 – برای آزمایش Terminable Middleware به آدرس زیر مراجعه کنید.
1 |
http://localhost:8000/terminate |
مرحله 10 – خروجی مطابق تصویر زیر ظاهر می شود.
دیدگاه شما