미들웨어는 서로 다른 시스템, 애플리케이션 또는 서비스 간의 원활한 통신 및 데이터 교환을 가능하게 하는 소프트웨어 설계 패턴입니다. 서로 다른 구성 요소 간의 상호 작용을 촉진하고 기능을 추가하며 전체 시스템 성능을 향상시키는 데 중요한 역할을 합니다.
이전 프로젝트에서는 로그인한 사용자가 등록 페이지를 방문할 때 다시 등록하라는 메시지가 표시되는 문제가 발생했습니다. 이는 미들웨어 구현이 부족하여 사용자 경험이 좋지 않았기 때문입니다.
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 값을 사용할 수 없고 어떤 값도 반환하지 않으므로 오류가 표시됩니다. 그래서 메소드를 다시 작성해야 합니다.
모든 값을 유일한 메소드로 반환하려면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!