> 백엔드 개발 > PHP 튜토리얼 > Laravel에서 미들웨어 마스터하기: 심층 가이드

Laravel에서 미들웨어 마스터하기: 심층 가이드

王林
풀어 주다: 2024-07-18 20:59:51
원래의
758명이 탐색했습니다.

Mastering Middleware in Laravel: An In-Depth Guide

웹 개발의 미로를 헤쳐나가는 동안 한 가지 기능이 제 길을 일관되게 밝혀주었습니다. 바로 Laravel의 미들웨어 시스템이었습니다. 미들웨어는 단순히 요청을 필터링하는 것이 아닙니다. 이는 애플리케이션을 변화시켜 보안, 성능 및 원활한 사용자 경험을 보장합니다. 인증, 로깅 또는 교차 편집 문제를 처리하는 경우 미들웨어를 사용하면 이를 우아하게 관리할 수 있습니다.

미들웨어의 이해

미들웨어는 요청응답 사이의 다리 역할을 하며 웹 애플리케이션의 요청-응답 수명 주기에서 중추적인 역할을 합니다. 먼저 요청과 응답이 무엇인지 분석해 보겠습니다. 클라이언트(일반적으로 사용자의 브라우저)가 서버에 웹페이지, 데이터 또는 기타 서비스와 같은 특정 리소스를 요청하는 요청입니다.

이 요청은 HTTP 메소드(GET, POST, ...), 헤더, 잠재적으로 데이터가 포함된 본문을 포함한 필수 정보를 전달합니다. 서버는 이 요청을 받으면 필요한 정보를 처리하고 응답을 생성합니다.

응답은 클라이언트의 요청에 대한 서버의 응답입니다. 여기에는 요청 상태(예: 성공, 실패), 헤더 및 클라이언트가 웹 페이지를 렌더링하거나 추가 작업을 실행하는 데 사용하는 HTML, JSON 또는 기타 데이터 형식이 포함된 본문이 포함됩니다.

미들웨어는 이러한 요청과 응답을 검사, 수정 또는 중지할 수 있는 중개자 역할을 합니다. 요청이 핵심 애플리케이션 로직에 도달하기 전과 응답이 클라이언트로 다시 전송되기 전에 작동합니다.

기본 애플리케이션 로직을 복잡하게 하지 않으면서 인증, 로깅, 데이터 조작과 같은 교차 문제를 처리할 수 있는 재사용 가능한 모듈식 코드가 가능하기 때문에 미들웨어가 필요합니다. 예를 들어, 미들웨어는 인증된 사용자만 특정 경로에 액세스하고, 디버깅 목적으로 각 요청을 기록하거나, 요청 데이터가 컨트롤러에 도달하기 전에 변환할 수 있도록 보장할 수 있습니다.

미들웨어 생성

Laravel에서 미들웨어를 만드는 것은 간단합니다. Artisan 명령어를 사용하여 새로운 미들웨어를 생성할 수 있습니다.

php artisan make:middleware CheckAge
로그인 후 복사

이 명령은 app/Http/Middleware 디렉토리에 새로운 CheckAge 미들웨어 파일을 생성합니다. 이 파일 내에서 각 요청에 대해 실행되어야 하는 논리를 정의할 수 있습니다.

<?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)
    {
        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }
}

로그인 후 복사

이 예에서 미들웨어는 요청의 age 속성을 ​​확인합니다. 연령이 200세 이하인 경우 사용자를 경로로 리디렉션합니다. 그렇지 않으면 요청이 진행되도록 허용합니다.

미들웨어 등록

미들웨어를 만든 후에는 커널에 등록해야 합니다. 커널은 HTTP 요청의 전체 라이프사이클을 관리하는 Laravel 애플리케이션의 핵심입니다. 요청이 애플리케이션의 경로와 컨트롤러에 도달하기 전에 다양한 미들웨어 계층을 통해 요청 흐름을 조율하는 중앙 허브 역할을 합니다.

app/Http/Kernel.php 파일 내에 미들웨어를 등록할 수 있는 두 가지 방법이 있습니다.

  1. 글로벌 미들웨어: 이 미들웨어는
    에 대한 요청이 있을 때마다 실행됩니다. 귀하의 지원서입니다.

  2. 라우트 미들웨어: 이러한 미들웨어는 특정
    에 할당될 수 있습니다. 노선.

CheckAge 미들웨어를 경로 미들웨어로 등록하려면 이를 커널의 $routeMiddleware 배열에 추가하세요.

protected $routeMiddleware = [
    // Other middleware
    'checkAge' => \App\Http\Middleware\CheckAge::class,
];

로그인 후 복사

이제 이 미들웨어를 경로 또는 경로 그룹에 적용할 수 있습니다.

Route::get('admin', function () {
    // Only accessible if age > 200
})->middleware('checkAge');

로그인 후 복사

고급 미들웨어 기술

Laravel의 미들웨어는 단순한 확인에만 국한되지 않습니다. 미들웨어를 최대한 활용하기 위한 몇 가지 고급 기술은 다음과 같습니다.

  1. 미들웨어 매개변수화

미들웨어는 추가 매개변수를 허용할 수 있습니다. 이는 매개변수에 따라 미들웨어의 동작이 변경될 수 있는 시나리오에 유용합니다.

public function handle($request, Closure $next, $role)
{
    if (! $request->user()->hasRole($role)) {
        // Redirect or abort
    }

    return $next($request);
}
로그인 후 복사
  1. 미들웨어 그룹화

여러 미들웨어를 하나의 키로 그룹화할 수 있어 미들웨어 세트를 여러 경로에 적용하는 데 도움이 됩니다.

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // more middleware
    ],
];
로그인 후 복사

경로에 미들웨어 그룹 적용:

Route::middleware(['web'])->group(function () {
    Route::get('/', function () {
        // Uses 'web' middleware group
    });

    Route::get('dashboard', function () {
        // Uses 'web' middleware group
    });
});
로그인 후 복사
  1. 미들웨어 종료

미들웨어는 응답이 브라우저에 전송되면 호출되는 terminate 메소드를 정의할 수 있습니다. 이는 로깅이나 분석과 같은 작업에 특히 유용합니다.

public function terminate($request, $response)
{
    // Log request and response
}
로그인 후 복사

결론

미들웨어를 마스터하면 안전하고 성능이 좋을 뿐만 아니라 유지 관리 및 확장이 가능한 애플리케이션을 만들 수 있습니다. 인증, 로깅을 처리하거나 사용자 정의 매개변수를 사용하여 애플리케이션 동작을 미세 조정하는 등 미들웨어는 깔끔하고 우아한 솔루션을 제공합니다.

Laravel 프로젝트에서 미들웨어의 강력한 기능을 활용하고 이것이 교차 편집 문제를 관리하는 방식을 어떻게 변화시키는지 확인하세요. 즐거운 코딩하세요!

위 내용은 Laravel에서 미들웨어 마스터하기: 심층 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿