품목

Laravel 미들웨어 작동 방식

Laravel 미들웨어는 사용자의 요청과 애플리케이션의 응답 사이에 개입하는 중간 애플리케이션 계층입니다.

즉, 사용자(Laravel 뷰)가 서버(Laravel 컨트롤러)에 요청을 하면 해당 요청이 미들웨어를 거치게 됩니다. 이 방법으로 미들웨어는 요청이 인증되었는지 여부를 확인할 수 있습니다. 

  • 사용자의 요청이 인증되면 요청이 백엔드로 전송됩니다.
  • 사용자의 요청이 인증되지 않은 경우 미들웨어는 사용자를 로그인 화면으로 리디렉션합니다.

라라벨은 다음을 허용합니다 defi완료하고 추가 미들웨어를 사용하여 인증을 제외한 다양한 작업을 수행합니다. 

인증 및 CSRF 보호와 같은 Laravel 미들웨어는 디렉토리에 있습니다. 앱/Http/미들웨어 .

따라서 미들웨어는 조건을 확인하고 작업을 수행할 수 있는 http 요청 필터라고 할 수 있습니다.

미들웨어 생성

새 미들웨어를 생성하기 위해 다음 명령을 실행합니다.

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

우리는 middleware 그리고 우리는 그것을 호출 CheckAge, artisan 다음과 같이 답변해 드립니다.

위의 창은 "라는 이름으로 미들웨어가 성공적으로 생성되었음을 보여줍니다. 체크 에이지 ".

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 $route미들웨어 . $middleware 속성 글로벌 미들웨어 및 소유권을 등록하는 데 사용됩니다. $route미들웨어 경로별 미들웨어를 등록하는 데 사용됩니다.

글로벌 미들웨어를 등록하려면 $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,
    ];

우리는 만들었습니다 체크 에이지 이전 예에서. 이제 이를 미들웨어 경로 속성에 등록할 수 있습니다. 이러한 등록을 위한 코드는 다음과 같습니다.

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

미들웨어 매개변수

미들웨어로 매개변수를 전달할 수도 있습니다. 

예를 들어 애플리케이션에 사용자, 관리자, 최고 관리자 등과 같은 다른 역할이 있는 경우 역할을 기반으로 작업을 인증하려는 경우 미들웨어와 함께 매개 변수를 전달하여 수행할 수 있습니다. 

우리가 만든 미들웨어에는 다음과 같은 함수가 포함되어 있으며 인수 뒤에 사용자 지정 인수를 전달할 수 있습니다. $다음 .

    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 두 개의 인수를 받게 됩니다 $ request 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

당신은 또한 좋아할지도 모릅니다 :

혁신 뉴스레터
혁신에 관한 가장 중요한 뉴스를 놓치지 마세요. 이메일로 받으려면 가입하세요.

최근 기사

어린이를 위한 컬러링 페이지의 장점 - 모든 연령대를 위한 마법의 세계

색칠을 통해 소근육 운동 능력을 키우면 아이들이 글쓰기와 같은 보다 복잡한 기술을 준비할 수 있습니다. 색칠하다…

2 월 2024

미래가 여기에 있습니다: 해운 산업이 글로벌 경제를 어떻게 혁신하고 있습니까?

해군 부문은 150억 시장을 향해 항해해온 진정한 글로벌 경제강국입니다.

1 월 2024

출판사와 OpenAI, 인공지능이 처리하는 정보의 흐름을 규제하기 위한 계약 체결

지난 월요일, Financial Times는 OpenAI와의 계약을 발표했습니다. FT는 세계적 수준의 저널리즘에 라이선스를 부여합니다…

4월 30 2024

온라인 결제: 스트리밍 서비스를 통해 영원히 결제하는 방법은 다음과 같습니다.

수백만 명의 사람들이 스트리밍 서비스 비용을 지불하고 월간 구독료를 지불합니다. 당신은…

4월 29 2024