Членове

Laravel междинен софтуер как работи

Мидълуерът на Laravel е междинен приложен слой, който се намесва между заявката на потребителя и отговора на приложението.

Това означава, че когато потребителят (Laravel изглед) направи заявка към сървъра (Laravel контролер), заявката ще премине през междинния софтуер. По този начин междинният софтуер може да провери дали заявката е удостоверена или не: 

  • ако заявката на потребителя е удостоверена, заявката се изпраща до бекенда;
  • ако заявката на потребителя не е удостоверена, междинният софтуер ще пренасочи потребителя към екрана за вход.

Laravel ви позволява defiзавършете и използвайте допълнителен междинен софтуер за изпълнение на различни задачи с изключение на удостоверяване. 

Средните софтуери на Laravel, като удостоверяване и CSRF защита, се намират в директорията приложение/Http/Middleware .

Следователно можем да кажем, че междинният софтуер е 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);
    }

Сега нека се опитаме да зададем параметъра на ролята на нов мидълуер, който ще създадем от нулата, след което продължете да създавате Ролев мидълуер, като изпълните следната команда

Променете метода на манипулатора, както следва

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

Може да ви хареса също:

Иновационен бюлетин
Не пропускайте най-важните новини за иновациите. Регистрирайте се, за да ги получавате по имейл.

Последни статии

Британският антитръстов регулатор повдига тревога на BigTech за GenAI

CMA на Обединеното кралство издаде предупреждение относно поведението на Big Tech на пазара на изкуствен интелект. Там…

18 април 2024

Casa Green: енергийна революция за устойчиво бъдеще в Италия

Указът „Case Green“, формулиран от Европейския съюз за повишаване на енергийната ефективност на сградите, приключи своя законодателен процес с...

18 април 2024

Електронната търговия в Италия с +27% според новия доклад на Casaleggio Associati

Представен е годишният доклад на Casaleggio Associati за електронната търговия в Италия. Доклад, озаглавен „AI-Commerce: границите на електронната търговия с изкуствен интелект“....

17 април 2024

Брилянтна идея: Bandalux представя Airpure®, завесата, която пречиства въздуха

Резултат от постоянни технологични иновации и ангажираност към околната среда и благосъстоянието на хората. Bandalux представя Airpure®, палатка...

12 април 2024

Прочетете Иновация на вашия език

Иновационен бюлетин
Не пропускайте най-важните новини за иновациите. Регистрирайте се, за да ги получавате по имейл.

Следвайте ни