Артиколи

Laravel аралық бағдарламасы қалай жұмыс істейді

Laravel аралық бағдарламалық құралы – пайдаланушының сұрауы мен қолданбаның жауабы арасында араласатын қолданбалы аралық деңгей.

Бұл дегеніміз, пайдаланушы (Laravel көрінісі) серверге (Laravel контроллері) сұраныс жасағанда, сұрау аралық бағдарлама арқылы өтеді. Осылайша, аралық бағдарлама сұраудың аутентификацияланғанын немесе расталмағанын тексере алады: 

  • егер пайдаланушының сұрауы аутентификацияланса, сұрау серверге жіберіледі;
  • егер пайдаланушының сұрауы аутентификацияланбаған болса, аралық бағдарлама пайдаланушыны кіру экранына қайта бағыттайды.

Laravel сізге мүмкіндік береді defiаутентификациядан басқа әртүрлі тапсырмаларды орындау үшін қосымша аралық бағдарламалық құралды аяқтаңыз және пайдаланыңыз. 

Түпнұсқалық растама және CSRF қорғау сияқты Laravel аралық бағдарламалары каталогта орналасқан app/Http/Орташа бағдарламалық құрал .

Демек, аралық бағдарламаны 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);
    }
}

Орташа бағдарламалық құралды пайдаланыңыз

Орташа бағдарламалық құралды пайдалану үшін біз оны тіркеуіміз керек.

Laravel-те аралық бағдарламалық құралдың екі түрі бар:

  • Middleware globale
  • Route Middleware

Il жаһандық аралық бағдарлама қолданбаның әрбір HTTP сұрауында орындалатын болады Маршрут аралық бағдарламалық құрал белгілі бір жолға тағайындалады. Орташа бағдарламалық құралды мына мекенжайда тіркеуге болады 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 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 $жауап. 

Әдіс 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.

Енді орта бағдарламалық құралды тіркейік

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

Сізге де ұнай алады:

Инновациялық ақпараттық бюллетень
Инновация туралы ең маңызды жаңалықтарды жіберіп алмаңыз. Оларды электрондық пошта арқылы алу үшін тіркеліңіз.

Соңғы мақалалар

Veeam қорғаныстан жауап беруге және қалпына келтіруге дейін төлемдік бағдарламалық құралға ең жан-жақты қолдау көрсетеді

Veeam ұсынған Coveware кибербопсалау оқиғаларына жауап беру қызметтерін көрсетуді жалғастырады. Coveware криминалистикалық және қалпына келтіру мүмкіндіктерін ұсынады ...

23 Сәуір 2024

Жасыл және цифрлық революция: болжамды техникалық қызмет көрсету мұнай және газ саласын қалай өзгертеді

Болжалды техникалық қызмет көрсету зауытты басқаруға инновациялық және белсенді көзқараспен мұнай және газ секторында төңкеріс жасайды.…

22 Сәуір 2024

Ұлыбританияның монополияға қарсы реттеушісі GenAI-ге қатысты BigTech дабылын көтереді

Ұлыбританияның CMA жасанды интеллект нарығындағы Big Tech әрекеті туралы ескерту жасады. Ана жерде…

18 Сәуір 2024

Casa Green: Италиядағы тұрақты болашақ үшін энергетикалық революция

Ғимараттардың энергия тиімділігін арттыру үшін Еуропалық Одақ тұжырымдаған «Жасыл үйлер» жарлығы өзінің заң шығару процесін аяқтады ...

18 Сәуір 2024

Инновацияны өз тіліңізде оқыңыз

Инновациялық ақпараттық бюллетень
Инновация туралы ең маңызды жаңалықтарды жіберіп алмаңыз. Оларды электрондық пошта арқылы алу үшін тіркеліңіз.

Артымыздан