Laravel - oprogramowanie pośredniczące

Oprogramowanie pośredniczące działa jako pomost między żądaniem a odpowiedzią. Jest to rodzaj mechanizmu filtrującego. W tym rozdziale wyjaśniono mechanizm oprogramowania pośredniego w Laravel.

Laravel zawiera oprogramowanie pośredniczące, które weryfikuje, czy użytkownik aplikacji jest uwierzytelniony, czy nie. Jeśli użytkownik jest uwierzytelniony, przekierowuje do strony głównej, w przeciwnym razie przekierowuje do strony logowania.

Oprogramowanie pośredniczące można utworzyć, wykonując następujące polecenie -

php artisan make:middleware <middleware-name>

Zastąp <middleware-name>z nazwą Twojego oprogramowania pośredniego. Oprogramowanie pośredniczące, które tworzysz, można zobaczyć pod adresemapp/Http/Middleware informator.

Przykład

Przyjrzyj się poniższemu przykładowi, aby zrozumieć mechanizm oprogramowania pośredniego -

Step 1- Stwórzmy teraz AgeMiddleware. Aby to stworzyć, musimy wykonać następujące polecenie -

php artisan make:middleware AgeMiddleware

Step 2 - Po pomyślnym wykonaniu polecenia otrzymasz następujące dane wyjściowe -

Step 3 - AgeMiddleware zostanie utworzony o godz app/Http/Middleware. Nowo utworzony plik będzie miał następujący kod już utworzony dla Ciebie.

<?php

namespace App\Http\Middleware;
use Closure;

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

Rejestrowanie oprogramowania pośredniego

Przed użyciem musimy zarejestrować każde oprogramowanie pośredniczące. W Laravel istnieją dwa rodzaje oprogramowania pośredniego.

  • Globalne oprogramowanie pośredniczące
  • Oprogramowanie pośredniczące routingu

Plik Global Middleware będzie działać na każde żądanie HTTP aplikacji, podczas gdy Route Middlewarezostaną przypisane do określonej trasy. Oprogramowanie pośredniczące można zarejestrować pod adresemapp/Http/Kernel.php. Ten plik zawiera dwie właściwości $middleware i $routeMiddleware. $middleware Właściwość jest używana do rejestrowania globalnego oprogramowania pośredniczącego i $routeMiddleware Właściwość jest używana do rejestrowania oprogramowania pośredniego specyficznego dla trasy.

Aby zarejestrować globalne oprogramowanie pośredniczące, podaj klasę na końcu właściwości $ middleware.

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

Aby zarejestrować oprogramowanie pośredniczące specyficzne dla trasy, dodaj klucz i wartość do właściwości $ routeMiddleware.

protected $routeMiddleware = [
   'auth' => \App\Http\Middleware\Authenticate::class,
   'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
   'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

Przykład

Stworzyliśmy AgeMiddlewarew poprzednim przykładzie. Możemy teraz zarejestrować go we właściwości oprogramowania pośredniego określonej trasy. Kod do tej rejestracji jest pokazany poniżej.

Poniżej znajduje się kod dla app/Http/Kernel.php -

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

Parametry oprogramowania pośredniego

Możemy również przekazywać parametry za pomocą oprogramowania pośredniego. Na przykład, jeśli Twoja aplikacja ma różne role, takie jak użytkownik, administrator, superadministrator itp. I chcesz uwierzytelnić akcję na podstawie roli, można to osiągnąć, przekazując parametry za pomocą oprogramowania pośredniego. Tworzone przez nas oprogramowanie pośredniczące zawiera następującą funkcję i możemy przekazać nasz niestandardowy argument po$next argument.

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

Przykład

Step 1 - Utwórz RoleMiddleware, wykonując następujące polecenie -

php artisan make:middleware RoleMiddleware

Step 2 - Po pomyślnym wykonaniu otrzymasz następujące dane wyjściowe -

Step 3 - Dodaj następujący kod w metodzie handle nowo utworzonej RoleMiddlewareat app/Http/Middleware/RoleMiddleware.php.

<?php

namespace App\Http\Middleware;
use Closure;

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

Step 4 - Zarejestruj RoleMiddleware w app\Http\Kernel.phpplik. Dodaj linię zaznaczoną na szaro w tym pliku, aby zarejestrować RoleMiddleware.

Step 5 - Wykonaj następujące polecenie, aby utworzyć TestController -

php artisan make:controller TestController --plain

Step 6 - Po pomyślnym wykonaniu powyższego kroku otrzymasz następujący wynik -

Step 7 - Skopiuj następujące wiersze kodu do app/Http/TestController.php plik.

app/Http/TestController.php

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

Step 8 - Dodaj następujący wiersz kodu w app/Http/routes.php plik.

app/Http/routes.php

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

Step 9 - Odwiedź następujący adres URL, aby przetestować oprogramowanie pośredniczące z parametrami

http://localhost:8000/role

Step 10 - Dane wyjściowe będą wyglądać tak, jak pokazano na poniższej ilustracji.

Terminalne oprogramowanie pośredniczące

Terminalne oprogramowanie pośredniczące wykonuje pewne zadanie po wysłaniu odpowiedzi do przeglądarki. Można to osiągnąć, tworząc oprogramowanie pośredniczące z platformąterminatew oprogramowaniu pośrednim. Terminalne oprogramowanie pośredniczące powinno być zarejestrowane w globalnym oprogramowaniu pośrednim. Metoda terminate otrzyma dwa argumenty$request i $response. Terminate można utworzyć, jak pokazano w poniższym kodzie.

Przykład

Step 1 - Utwórz TerminateMiddleware wykonując poniższe polecenie.

php artisan make:middleware TerminateMiddleware

Step 2 - Powyższy krok da następujący wynik -

Step 3 - Skopiuj następujący kod do nowo utworzonego pliku TerminateMiddleware w 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.";
   }
}

Step 4 - Zarejestruj TerminateMiddleware w app\Http\Kernel.phpplik. Dodaj linię podświetloną na szaro w tym pliku, aby zarejestrować TerminateMiddleware.

Step 5 - Wykonaj następujące polecenie, aby utworzyć ABCController.

php artisan make:controller ABCController --plain

Step 6 - Po pomyślnym wykonaniu adresu URL otrzymasz następujące dane wyjściowe -

Step 7 - Skopiuj poniższy kod do app/Http/ABCController.php plik.

app/Http/ABCController.php

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

Step 8 - Dodaj następujący wiersz kodu w app/Http/routes.php plik.

app/Http/routes.php

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

Step 9 - Odwiedź poniższy adres URL, aby przetestować terminalne oprogramowanie pośredniczące.

http://localhost:8000/terminate

Step 10 - Dane wyjściowe będą wyglądać tak, jak pokazano na poniższej ilustracji.