Артыкулы

Laravel прамежкавае праграмнае забеспячэнне, як гэта працуе

Прамежкавае праграмнае забеспячэнне Laravel - гэта прамежкавы ўзровень прыкладання, які ўмешваецца паміж запытам карыстальніка і адказам прыкладання.

Гэта азначае, што калі карыстальнік (выгляд Laravel) робіць запыт на сервер (кантролер Laravel), запыт будзе праходзіць праз прамежкавае праграмнае забеспячэнне. Такім чынам прамежкавае праграмнае забеспячэнне можа праверыць, аўтэнтыфікаваны запыт ці не: 

  • калі запыт карыстальніка аўтэнтыфікаваны, запыт адпраўляецца ў бэкэнд;
  • калі запыт карыстальніка не аўтэнтыфікаваны, прамежкавае праграмнае забеспячэнне перанакіруе карыстальніка на экран ўваходу.

Laravel дазваляе вам defiзавяршыць і выкарыстоўваць дадатковае прамежкавае праграмнае забеспячэнне для выканання розных задач, акрамя аўтэнтыфікацыі. 

Прамежкавае праграмнае забеспячэнне Laravel, такое як аўтэнтыфікацыя і абарона CSRF, знаходзіцца ў каталогу прыкладанне/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-запыт ад прыкладання, у той час як Прамежкавае праграмнае забеспячэнне маршруту будзе прызначаны для пэўнага шляху. Прамежкавае праграмнае забеспячэнне можна зарэгістраваць па адрасе дадатак/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);
    }

Зараз давайце паспрабуем усталяваць параметр ролі для новага прамежкавага праграмнага забеспячэння, якое мы збіраемся стварыць з нуля, а затым пяройдзем да стварэння ролевага прамежкавага праграмнага забеспячэння, выканаўшы наступную каманду

Змяніце метад ручкі наступным чынам

<?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.

Зараз давайце зарэгіструем 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

Вам таксама могуць спадабацца:

Інавацыйны бюлетэнь
Не прапусціце самыя важныя навіны пра інавацыі. Падпішыцеся, каб атрымліваць іх па электроннай пошце.

Апошнія артыкулы

Будучыня тут: як індустрыя суднаходства рэвалюцыянізуе сусветную эканоміку

Ваенна-марскі сектар - гэта сапраўдная глабальная эканамічная сіла, якая перайшла да 150-мільярднага рынку...

1 мая 2024

Выдаўцы і OpenAI падпісваюць пагадненні аб рэгуляванні патоку інфармацыі, апрацаванай штучным інтэлектам

У мінулы панядзелак Financial Times абвясціла аб здзелцы з OpenAI. FT ліцэнзуе сваю журналістыку сусветнага ўзроўню...

Красавік 30 2024

Інтэрнэт-плацяжы: вось як паслугі струменевай перадачы прымушаюць вас плаціць вечна

Мільёны людзей плацяць за струменевыя паслугі, плацячы штомесячную абаненцкую плату. Распаўсюджана меркаванне, што вы…

Красавік 29 2024

Veeam прапануе самую поўную падтрымку праграм-вымагальнікаў - ад абароны да адказу і аднаўлення

Coveware ад Veeam працягне прадастаўляць паслугі рэагавання на інцыдэнты кібервымагальніцтва. Coveware будзе прапаноўваць судова-медыцынскую экспертызу і магчымасці выпраўлення…

Красавік 23 2024

Чытайце Innovation на сваёй мове

Інавацыйны бюлетэнь
Не прапусціце самыя важныя навіны пра інавацыі. Падпішыцеся, каб атрымліваць іх па электроннай пошце.

Выконвайце за намі