ThinkPHP6에서 미들웨어는 일반적으로 사용되는 요청 처리 도구입니다. 미들웨어를 통해 요청을 쉽게 처리하여 권한 제어, 로깅, 요청 확인 및 기타 기능을 구현하여 애플리케이션의 보안 및 유지 관리성을 향상시킬 수 있습니다. 이 기사에서는 ThinkPHP6에서 요청 처리를 위해 미들웨어를 사용하는 방법을 소개합니다.
1. 미들웨어란?
미들웨어는 클라이언트가 보낸 요청을 가로채서 처리할 수 있는 독립적인 요청 처리기입니다. ThinkPHP6에서는 미들웨어가 PSR-15 사양을 기반으로 설계되었습니다. 미들웨어를 통해 요청을 사전 처리하거나 사후 처리하여 로그인 확인, 권한 제어, 요청 필터링, 응답 처리 등과 같은 몇 가지 공통 기능을 구현할 수 있습니다.
2. ThinkPHP6 미들웨어 사용
ThinkPHP6에서는 명령줄 도구를 통해 빠르게 미들웨어를 생성할 수 있습니다. app/middleware 디렉토리에 CheckAuth라는 미들웨어를 생성하려면 다음 명령을 사용하십시오.
php think make:middleware CheckAuth
생성된 CheckAuth 미들웨어 클래스는 다음과 같습니다.
<?php namespace appmiddleware; class CheckAuth { public function handle($request, Closure $next) { // 执行中间件操作 return $next($request); } }
위 코드에서 미들웨어 클래스에는 핸들 메소드가 포함되어 있어야 합니다. 핸들 메소드는 $request 및 $next라는 두 개의 매개변수를 허용합니다. 여기서 $request는 요청 객체이고 $next는 다음 미들웨어 또는 컨트롤러의 처리 메소드입니다. 핸들 메소드에서는 $request 객체에 대해 일부 전처리를 수행한 다음 return $next($request)를 사용하여 다음 미들웨어 또는 컨트롤러의 처리 메소드를 호출할 수 있습니다.
미들웨어를 생성한 후 애플리케이션에 등록해야 합니다. ThinkPHP6에서는 애플리케이션 구성, 경로 정의, 컨트롤러 주석을 통해 미들웨어를 등록할 수 있습니다.
2.1 애플리케이션 구성
애플리케이션 구성 파일 config/app.php에서 전역 미들웨어를 구성하거나 요청에 따라 미들웨어를 설정할 수 있습니다.
// 全局中间件 'middleware' => [ appmiddlewareCheckAuth::class, ], // 按需设置中间件 'route' => [ // Route::group 也支持 'blog/detail' => ['appmiddlewareCheckAuth'], ]
위 코드에서는 미들웨어 구성 항목을 사용하여 미들웨어를 전역적으로 등록할 수 있습니다. 각 미들웨어의 클래스 이름은 쉼표로 구분됩니다. 경로 구성 항목에서는 다양한 경로에 대한 미들웨어를 지정할 수 있습니다.
2.2 경로 정의
Route::rule 메서드 또는 Route::group 메서드에서 미들웨어를 지정할 수 있습니다.
use thinkacadeRoute; Route::rule('blog/detail', 'blog/detail', 'GET')->middleware('appmiddlewareCheckAuth');
위 코드에서는 Route::rule 메소드 호출 시 미들웨어를 지정하기 위해 미들웨어 메소드를 추가했습니다.
2.3 컨트롤러 주석
컨트롤러 주석에 미들웨어를 지정할 수 있습니다.
namespace appcontroller; /** * @middleware(appmiddlewareCheckAuth::class) */ class Blog { public function detail() { // 控制器的处理逻辑 } }
위 코드에서는 미들웨어를 지정하기 위해 컨트롤러 주석에 middleware 속성을 추가했습니다.
ThinkPHP6에서는 미들웨어가 등록 순서대로 실행되어 먼저 등록 및 실행된 후 등록 및 실행됩니다.
애플리케이션 구성 및 컨트롤러 주석에서 Middleware::class 메서드를 사용하여 미들웨어의 실행 순서를 지정할 수 있습니다. 아래와 같이
// 全局中间件按照顺序执行 'middleware' => [ appmiddlewareLog::class, appmiddlewareCheckAuth::class, ], // 按需设置中间件按照顺序执行 'route' => [ 'blog/detail' => ['appmiddlewareLog', 'appmiddlewareCheckAuth'] ], // 控制器注解中间件按照顺序执行 namespace appcontroller; /** * @middleware([appmiddlewareLog::class, appmiddlewareCheckAuth::class]) */ class Blog { public function detail() { // 控制器的处理逻辑 } }
위 코드에서는 미들웨어 등록 순서대로 Middleware::class 메소드를 지정했습니다.
미들웨어는 매개변수 전달을 통해 데이터를 공유할 수 있습니다. 핸들 메소드에서는 $request 객체에 속성, 메소드 또는 매개변수를 추가한 다음 $request 객체를 다음 미들웨어나 컨트롤러에 전달하여 데이터 공유를 달성할 수 있습니다.
예를 들어 다음 예에서는 첫 번째 미들웨어에 $name 속성을 정의하고 이를 두 번째 미들웨어와 컨트롤러에 전달하여 해당 속성을 사용할 수 있도록 합니다.
<?php namespace appmiddleware; class CheckAuth { public function handle($request, Closure $next, $name) { $request->name = $name; return $next($request); } } class Log { public function handle($request, Closure $next) { echo 'name:' . $request->name . '<br>'; return $next($request); } } namespace appcontroller; class Blog { public function detail(Request $request) { echo 'name:' . $request->name . '<br>'; // 控制器的处理逻辑 } } // 路由配置文件 use thinkacadeRoute; Route::rule('blog/detail', 'blog/detail', 'GET') ->middleware(['appmiddlewareCheckAuth:name', 'appmiddlewareLog']);
위 코드에서는 CheckAuth 클래스의 핸들 메소드에 $name 속성을 정의하고 이를 $request 객체에 저장합니다. Log 클래스와 Blog 컨트롤러의 핸들 메소드 모두에서 $request 객체를 통해 이 속성에 액세스할 수 있습니다.
경로 정의에서는 미들웨어의 매개변수 전달 기능을 사용하여 매개변수 이름을 CheckAuth 미들웨어에 전달합니다. 주문형 미들웨어 설정에서 Middleware::class 메소드를 사용하여 미들웨어 매개변수를 지정할 수도 있습니다.
5. 요약
미들웨어는 요청 전후에 클라이언트 요청을 전처리하거나 후처리할 수 있는 일반적으로 사용되는 요청 처리 도구입니다. ThinkPHP6에서는 미들웨어가 PSR-15 사양을 기반으로 설계되어 있어 미들웨어를 통해 권한 제어, 로깅, 요청 확인 등의 기능을 쉽게 구현할 수 있습니다. 미들웨어는 등록된 순서대로 실행되며, 매개변수 전달을 통해 미들웨어 간 데이터 공유가 가능하다. 미들웨어의 유연한 사용을 통해 애플리케이션의 보안, 유지 관리성 및 확장성을 향상할 수 있습니다.
위 내용은 ThinkPHP6에서 요청 처리를 위해 미들웨어를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!