Məqalələr

Laravel ara proqramı necə işləyir

Laravel ara proqramı istifadəçinin sorğusu ilə tətbiqin cavabı arasında müdaxilə edən ara proqram qatıdır.

Bu o deməkdir ki, istifadəçi (Laravel görünüşü) serverə (Laravel nəzarətçisi) sorğu göndərdikdə sorğu ara proqramdan keçəcək. Bu yolla ara proqram sorğunun autentifikasiya olunub-olunmadığını yoxlaya bilər: 

  • istifadəçinin sorğusu autentifikasiya olunarsa, sorğu backend-ə göndərilir;
  • əgər istifadəçinin sorğusu təsdiqlənməyibsə, ara proqram istifadəçini giriş ekranına yönləndirəcək.

Laravel sizə imkan verir defiautentifikasiya istisna olmaqla, müxtəlif tapşırıqları yerinə yetirmək üçün əlavə ara proqram təminatını bitirin və istifadə edin. 

Laravel ara proqramları, məsələn, autentifikasiya və CSRF mühafizəsi kataloqda yerləşir app/Http/Middleware .

Buna görə də deyə bilərik ki, ara proqram təminatı http sorğu filtridir, onun vasitəsilə şərtləri yoxlamaq və hərəkətləri yerinə yetirmək mümkündür.

Ara proqramın yaradılması

Yeni bir ara proqram yaratmaq üçün aşağıdakı əmri icra edirik:

php artisan make:middleware <name-of-middleware>

yaradırıq middleware və biz buna deyirik CheckAge, artisan bizə belə cavab verəcək:

Yuxarıdakı pəncərə orta proqramın uğurla adı ilə yaradıldığını göstərir. CheckAge ".

CheckAge ara proqramının yaradılıb-yaradılmadığını görmək üçün app/Http/Middleware qovluğunda layihəyə keçin və siz yeni yaradılmış faylı görəcəksiniz.

Yeni yaradılmış faylda aşağıdakı kod var

<?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);
    }
}

Ara proqramdan istifadə edin

Ara proqram təminatından istifadə etmək üçün onu qeydiyyatdan keçirməliyik.

Laravel-də iki növ ara proqram var:

  • Middleware globale
  • Route Middleware

Il qlobal orta proqram proqramdan hər HTTP sorğusunda yerinə yetiriləcək Marşrut Orta Proqramı müəyyən bir yola təyin ediləcək. Orta proqram qeydiyyatdan keçə bilər app/Http/Kernel.php. Bu faylda iki xüsusiyyət var $orta proqram e $routeMiddleware . $middleware mülkiyyəti qlobal orta proqram təminatını və mülkiyyət hüququnu qeydiyyata almaq üçün istifadə olunur $routeMiddleware marşruta aid ara proqramın qeydiyyatı üçün istifadə olunur.

Qlobal orta proqram təminatını qeydiyyatdan keçirmək üçün sinfi $middleware mülkiyyətinin sonunda qeyd edin.

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,
    ];

Marşrut üçün xüsusi ara proqram təminatını qeydiyyatdan keçirmək üçün açar və dəyəri $routeMiddleware xassəsinə əlavə edin.

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,
    ];

yaratdıq CheckAge əvvəlki nümunədə. İndi biz bunu ara proqram marşrutu mülkiyyətində qeyd edə bilərik. Belə bir qeydiyyat üçün kod aşağıda göstərilmişdir.

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,
    ];

Orta proqram parametrləri

Parametrləri Middleware ilə də ötürə bilərik. 

Məsələn, tətbiqinizdə istifadəçi, admin, super admin və s. kimi fərqli rollar varsa. və siz rola əsaslanaraq hərəkətin autentifikasiyasını etmək istəyirsinizsə, bunu parametrləri ara proqram vasitəsi ilə ötürməklə edə bilərsiniz. 

Yaratdığımız ara proqram aşağıdakı funksiyanı ehtiva edir və biz arqumentdən sonra fərdi arqumentləri ötürə bilərik $növbəti .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

İndi gəlin sıfırdan yaratacağımız yeni ara proqrama rol parametrini təyin etməyə çalışaq, sonra aşağıdakı əmri işlədərək Rol Orta Proqramını yaratmağa davam edək.

Dəstəyin üsulunu aşağıdakı kimi dəyişdirin

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

parametrini əlavə etdik $role, metodun içərisində isə xətt echo çıxışa rolun adını yazmaq üçün.

İnnovasiya bülleteni
Yeniliklərlə bağlı ən vacib xəbərləri qaçırmayın. Onları e-poçtla almaq üçün qeydiyyatdan keçin.

İndi gəlin müəyyən bir yol üçün RoleMiddleware ara proqramını qeydiyyatdan keçirək

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,
    ];

İndi orta proqram təminatını parametrlə yoxlamaq üçün sorğu və cavab yaratmalıyıq. Cavabın simulyasiyası üçün TestController adlandıracağımız nəzarətçi yaradaq

php artisan make:controller TestController --plain

indicə yerinə yetirilən komanda qovluq daxilində yeni nəzarətçi yaradacaq app/Http/TestController.php, və metodu dəyişdirin index xətti ilə 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.";
   }
}

Cavab təyin etdikdən sonra faylı redaktə edərək sorğunu qururuq routes.phpəlavə etməklə route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

bu nöqtədə URL-i ziyarət edərək nümunəni sınaya bilərik http://localhost:8000/role

və brauzerdə biz ikisini görəcəyik echo

Role editor
Test Controller

Son edilə bilən orta proqram

Il terminable Middleware cavab brauzerə göndərildikdən sonra bəzi tapşırıqları yerinə yetirir. Buna metodla orta proqram yaratmaqla nail olmaq olar ara proqramda sonlandırın. Il terminable Middleware ilə qeydiyyatdan keçməlidir middleware qlobal. Metod terminate iki arqument alacaq $ sorğu e $cavab. 

Metod Terminate aşağıdakı kodda göstərildiyi kimi yaradılmalıdır.

php artisan make:middleware TerminateMiddleware

Orta proqram yaradıldıqdan sonra app/Http/Middleware/TerminateMiddleware.php kodu aşağıdakı kimi dəyişdirək

<?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.";
   }
}

bu vəziyyətdə bir üsulumuz var handle və bir üsul terminate iki parametrlə $request e $response.

İndi Middleware-i qeydiyyatdan keçirək

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,
    ];

İndi cavabı simulyasiya etmək üçün nəzarətçi yaratmalıyıq

php artisan make:controller XYZController --plain

sinfin məzmununu dəyişdirmək

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

İndi faylı redaktə etməliyik routes/web.php sorğunun aktivləşdirilməsi üçün lazım olan marşrutların əlavə edilməsi

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

bu nöqtədə URL-i ziyarət edərək nümunəni sınaya bilərik http://localhost:8000/terminate

və brauzerdə aşağıdakı sətirləri görəcəyik

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

İstəyə bilərsiniz:

İnnovasiya bülleteni
Yeniliklərlə bağlı ən vacib xəbərləri qaçırmayın. Onları e-poçtla almaq üçün qeydiyyatdan keçin.

Articoli recenti

Veeam müdafiədən tutmuş cavab və bərpaya qədər ransomware üçün ən əhatəli dəstəyi təqdim edir

Coveware by Veeam kiber qəsb hallarına cavab xidmətləri göstərməyə davam edəcək. Coveware məhkəmə və remediasiya imkanları təklif edəcək...

23 Aprel 2024

Yaşıl və Rəqəmsal İnqilab: Proqnozlaşdırılan Baxım Neft və Qaz Sənayesini necə çevirir?

Proqnozlaşdırılan texniki xidmət zavodun idarə edilməsinə innovativ və proaktiv yanaşma ilə neft və qaz sektorunda inqilab edir.…

22 Aprel 2024

Böyük Britaniyanın antiinhisar tənzimləyicisi GenAI üzərində BigTech həyəcanını qaldırır

Böyük Britaniyanın CMA süni intellekt bazarında Big Tech-in davranışı ilə bağlı xəbərdarlıq edib. Orada…

18 Aprel 2024

Casa Green: İtaliyada davamlı gələcək üçün enerji inqilabı

Avropa İttifaqı tərəfindən binaların enerji səmərəliliyini artırmaq üçün tərtib edilən "Yaşıl Evlər" Fərmanı qanunvericilik prosesini yekunlaşdırdı ...

18 Aprel 2024