미들웨어 소개

WBOY
풀어 주다: 2024-07-18 16:59:52
원래의
558명이 탐색했습니다.

Intro to Middleware

미들웨어란 무엇입니까?

미들웨어는 서로 다른 시스템, 애플리케이션 또는 서비스 간의 원활한 통신 및 데이터 교환을 가능하게 하는 소프트웨어 설계 패턴입니다. 서로 다른 구성 요소 간의 상호 작용을 촉진하고 기능을 추가하며 전체 시스템 성능을 향상시키는 데 중요한 역할을 합니다.

문제

이전 프로젝트에서는 로그인한 사용자가 등록 페이지를 방문할 때 다시 등록하라는 메시지가 표시되는 문제가 발생했습니다. 이는 미들웨어 구현이 부족하여 사용자 경험이 좋지 않았기 때문입니다.

PHP의 미들웨어

PHP에서는 미들웨어를 사용하여 사용자 등록 및 로그인 기능을 처리하여 원활한 사용자 경험을 보장할 수 있습니다. 미들웨어는 서로 다른 구성 요소 간의 브리지 역할을 하여 원활한 통신과 데이터 교환을 가능하게 합니다.

if ($_SESSION['user'] ?? false){ 
    header('location: /'); 
    exit(); 
}
로그인 후 복사

사용자가 로그인되어 있는지 여부를 확인합니다. 그렇지 않은 경우 스크립트를 종료하여 인증된 사용자를 찾으세요.

경로 구성

routes.php 파일에서 경로에 'guest' 키를 추가하여 미들웨어와 연결할 수 있습니다.

$router->get('/register', 'controllers/registration/create.php')->only('guest');
로그인 후 복사

유일한 방법 디버깅

프로젝트가 예상대로 작동하는지 확인하려면 유일한 메서드에 디버그 문을 추가할 수 있습니다.

public function only($key){ 
    dd($key); 
}
로그인 후 복사

유일한 메소드는 get 메소드와 연관되어 있기 때문에 null 값을 사용할 수 없고 어떤 값도 반환하지 않으므로 오류가 표시됩니다. 그래서 메소드를 다시 작성해야 합니다.

Add 메서드 다시 작성

모든 값을 유일한 메소드로 반환하려면 router.php 파일의 add 메소드를 다음과 같이 다시 작성해야 합니다.

public function add($method, $uri, $controller) 
{ 
    $this->routes[] = [ 
        'uri' => $uri, 
        'controller' => $controller, 
        'method' => $method, 
        'middleware'=>null 
    ]; 
    return $this; 
}
로그인 후 복사

이제 프로젝트가 잘 진행되고 있는 것을 볼 수 있습니다.

유일한 방법

미들웨어 키를 허용하도록 router.php 파일의 유일한 메소드를 수정해야 합니다.

public function only($key){ 
    $this->routes[array_key_last($this->routes)]['middleware']=$key; 
    return $this; 
}
로그인 후 복사

미들웨어 확인

create.php 파일에서 미들웨어를 사용하여 사용자가 로그인했는지 또는 게스트인지 확인할 수 있습니다.

if ($route['middleware']==='guest'){ 
    if($_SESSION['user'] ?? false){ 
        header('location: /'); 
        exit(); 
    } 
} 
if ($route['middleware']==='auth'){ 
    if(! $_SESSION['user'] ?? false){ 
        header('location: /'); 
        exit(); 
    } 
}
로그인 후 복사

인증된 사용자만 모든 페이지에 접근할 수 있고 게스트는 제한된 페이지에만 접근할 수 있습니다.

미들웨어 디렉토리 생성

미들웨어 클래스를 구성하려면 핵심 폴더에 Middleware라는 새 디렉터리를 만듭니다. 우리는 휴식을 취하기 위해 한 지점에서 변화를 주어야 하므로 노력과 시간을 절약해야 합니다. 이를 통해 프로젝트를 더 쉽게 이해할 수 있습니다. 여기에는 3개의 서로 다른 클래스가 생성됩니다.

인증 미들웨어

Authenticated.php 파일은 사용자가 로그인되어 있는지 확인하고 true인 경우 홈 페이지로 리디렉션합니다.

<?php namespace Core\Middleware; 
class Authenticated { 
    public function handle() { 
        if (! $_SESSION['user'] ?? false) { 
            header('location: /'); 
            exit(); 
        } 
    } 
}
로그인 후 복사

게스트 미들웨어

Guest.php 파일은 사용자가 로그인되어 있지 않은지 확인하고 true인 경우 홈 페이지로 리디렉션합니다.

<?php namespace Core\Middleware; 
class Guest { 
    public function handle() { 
        if ($_SESSION['user'] ?? false) { 
            header('location: /'); 
            exit(); 
        } 
    } 
}
로그인 후 복사

미들웨어 클래스

Middleware.php 파일은 MAP 상수를 사용하여 미들웨어 키를 해당 클래스에 매핑합니다. 또한 미들웨어가 존재하는지 여부도 확인합니다. 그렇지 않은 경우 프로젝트에 미들웨어를 추가하도록 사용자에게 포착되지 않은 예외를 표시합니다.

<?php namespace Core\Middleware; 
class Middleware { 
    public const MAP = [ 
        'guest' => Guest::class, 
        'auth' => Authenticated::class 
    ]; 
    public static function resolve($key) { 
        if (!$key) { 
            return; 
        } 
        $middleware = static::MAP[$key] ?? false; 
        if (!$middleware) { 
            throw new \Exception("No matching middleware found for key '{$key}'."); 
        } 
        (new $middleware)->handle(); 
    } 
}
로그인 후 복사

이제 이러한 변경을 통해 프로젝트가 잘 진행되고 있음을 알 수 있습니다.

명확하게 이해하셨기를 바랍니다.

위 내용은 미들웨어 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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