ThinkPHP6.0 미들웨어는 시스템 미들웨어와 애플리케이션 미들웨어로 구분됩니다. 시스템 미들웨어는 핵심 프레임워크에 내장된 미들웨어이며, 애플리케이션 미들웨어는 애플리케이션 내에 생성됩니다. .
미들웨어의 주요 애플리케이션 시나리오에는 HTTP 요청의 데이터 필터링, 권한 감지, 요청 차단 및 기타 동작이 포함될 수 있습니다. 미들웨어를 사용하면 컨트롤러 정의가 더 단순해지고 핵심이 아닌 추가 비즈니스 프로세스가 많이 제거될 수 있습니다. .모든 처리는 미들웨어에 넘겨져 실행될 수 있습니다.
미들웨어의 사용 범위 관점에서 보면 글로벌 미들웨어, 애플리케이션 미들웨어, 컨트롤러 미들웨어, 라우팅 미들웨어로 나눌 수 있습니다.
Global middleware
Global 미들웨어는 appmiddleware.php에 정의된 미들웨어입니다. 기본적으로 활성화되는 미들웨어는 없지만 지원되는 시스템 미들웨어입니다. 해당 시스템 미들웨어를 사용하려면 주석만 제거하면 됩니다. 기본 내용은 다음과 같습니다.
return [ // 全局请求缓存 // 'think\middleware\CheckRequestCache', // 多语言加载 // 'think\middleware\LoadLangPack', // Session初始化 // 'think\middleware\SessionInit', // 页面Trace调试 // 'think\middleware\TraceDebug', ];
전역 요청을 포함한 시스템의 일부 기능은 통합 관리를 위해 미들웨어에 넘겨집니다. 캐싱, 다국어 자동 감지 및 로딩, 세션 초기화 및 페이지 추적 디버깅, 즉 기본적으로 설치된 애플리케이션은 세션을 적용하기 전에 전역적으로 세션 초기화 미들웨어를 활성화해야 합니다. API 애플리케이션의 경우 세션 기능 지원이 필요하지 않습니다.
전역 미들웨어 정의 파일에 애플리케이션 미들웨어를 추가할 수 있지만 시스템 미들웨어가 먼저 실행되는지 확인하세요. 미들웨어 정의는 전체 클래스 이름을 사용해야 합니다. 이는 다음을 통해 수행할 수 있습니다. 명령줄 명령 애플리케이션 미들웨어를 빠르게 생성합니다:
php think make:middleware Test
은 다음 내용으로 appmiddlewareTest 미들웨어 클래스를 자동으로 생성합니다:
<?php namespace app\middleware; class Test { public function handle($request, \Closure $next) { } }
또한 전체 네임스페이스를 지정하여 미들웨어 클래스 생성을 지원합니다. .
php think make:middleware app\middleware\Hello
테스트 출력을 추가합니다.
<?php namespace app\middleware; class Test { public function handle($request, \Closure $next) { echo 'Before Middleware<br/>'; $response = $next($request); echo 'After Middleware<br/>'; return $response; } }
미들웨어 핸들 메서드의 반환 값은 Response 객체여야 합니다.
그런 다음 전역 미들웨어 정의에
return [ \app\middleware\Test::class, ];
을 추가합니다. 우리가 액세스하려는 컨트롤러 메서드는
<?php namespace app\controller; class Index { public function hello() { return 'Hello,ThinkPHP!<br/>'; } }
작업 메서드 액세스의 출력입니다.
Before Middleware Hello,ThinkPHP! After Middleware
미들웨어의 실행 과정을 보면, pre-middleware와 post-middleware로 나눌 수 있습니다. 물론 미들웨어에는 pre-middleware와 post-middleware가 있을 수도 있습니다. 프로세스 동작. 위의 테스트 미들웨어는 다음과 같습니다. $next($request) 앞의 코드는 pre-middleware 범주에 속하고, 뒤의 코드는 post-middleware 범주에 속합니다.
Application middleware
다중 애플리케이션 모드인 경우 애플리케이션 미들웨어는 앱 애플리케이션 이름 middleware.php에 정의된 미들웨어입니다. 는 이 애플리케이션에서만 유효하며 정의 형식은 글로벌 미들웨어와 일치합니다.
라우팅 미들웨어
라우팅 미들웨어는 특정 미들웨어가 경로가 일치한 후에만 실행되며 경로 정의에 사용된다는 의미입니다. 미들웨어 메서드 정의(예:
Route::get('hello/:name','index/hello') ->middleware(\app\middleware\Hello::class);
경로 그룹화를 위한 미들웨어를 정의할 수 있습니다
Route::group(function(){ Route::get('hello/:name','index/hello'); //... })->middleware(\app\middleware\Hello::class);
여러 미들웨어를 실행하려면
Route::group(function(){ Route::get('hello/:name','index/hello'); //... })->middleware([\app\middleware\Hello::class,\app\middleware\Check::class]);
return [ 'hello'=>\app\middleware\Hello::class, 'check'=>\app\middleware\Check::class, ];
Route::group(function(){ Route::get('hello/:name','index/hello'); //... })->middleware(['hello','check']);
return [ 'test'=>[\app\middleware\Hello::class,\app\middleware\Check::class], ];
Route::group(function(){ Route::get('hello/:name','index/hello'); //... })->middleware('test');
<?php namespace app\middleware; class Hello { public function handle($request, \Closure $next, string $name = '') { echo 'Hello'. $name . '<br/>'; return $next($request); } }
라우팅 미들웨어의 두 번째 매개변수에 이름 매개변수를 전달할 수 있습니다.
Route::get('hello/:name','index/hello') ->middleware('hello', 'middleware');
지원 매개변수 외에도 미들웨어의 핸들 메소드에서 종속성 주입을 사용할 수 있습니다.
컨트롤러 미들웨어컨트롤러 미들웨어는 특정 컨트롤러에 액세스할 때만 적용됩니다.
<?php namespace app\controller; class Hello { protected $middleware = ['hello','check']; public function index() { return 'Hello,ThinkPHP!<br/>'; } }
<?php namespace app\controller; class Index { protected $middleware = [ 'hello' => ['only' => ['hello']], 'check' => ['except'=> ['hello']], ]; public function hello() { return 'Hello,ThinkPHP!<br/>'; } public function check() { return 'this action require check!<br/>'; } }
미들웨어 전달 매개변수
미들웨어와 컨트롤러 간에 매개변수를 전달하는 방법에는 여러 가지가 있습니다. 간단한 방법은 매개변수 전달 요청을 사용하는 것입니다.
<?php namespace app\middleware; class Hello { public function handle($request, \Closure $next) { $request->hello = 'ThinkPHP'; return $next($request); } }
public function index(Request $request) { return $request->hello; // ThinkPHP }
ThinkPHP 튜토리얼
동영상은 모두 PHP 중국어 웹사이트에서 볼 수 있습니다. 온라인으로 배워보세요!이 기사는 다음에서 복제되었습니다: https://www.php.cn/phpkj/thinkphp/
위 내용은 한 기사에서 ThinkPHP6.0의 미들웨어에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!