버전 5.1.6+부터 미들웨어 지원이 공식적으로 도입되었습니다.
미들웨어는 주로 애플리케이션의 HTTP 요청을 가로채거나 필터링하고 필요한 비즈니스 처리를 수행하는 데 사용됩니다.
미들웨어 정의
명령줄 지침을 통해 빠르게 미들웨어를 생성할 수 있습니다
php think make:middleware Check
이 명령은 application/http/middleware 디렉토리 아래에 Check 미들웨어를 생성합니다.
<?php namespace app\http\middleware; class Check { public function handle($request, \Closure $next) { if ($request->param('name') == 'think') { return redirect('index/think'); } return $next($request); } }
미들웨어의 항목 실행 방식은 반드시 핸들 방식이어야 하며, 첫 번째 매개변수는 Request 객체, 두 번째 매개변수는 클로저입니다.
미들웨어 핸들 메서드의 반환 값은 Response 객체여야 합니다.
이 미들웨어에서는 현재 요청의 이름 매개변수가 think와 동일하다고 판단되면 리디렉션 처리를 수행합니다. 그렇지 않으면 요청이 애플리케이션으로 더 전달됩니다. 애플리케이션에 요청을 계속 전달하려면 $request를 인수로 사용하여 콜백 함수 $next를 호출하면 됩니다.
특정 요구 사항에서는 세 번째 매개변수를 사용하여 추가 매개변수를 전달할 수 있습니다.
<?php namespace app\http\middleware; class Check { public function handle($request, \Closure $next, $name) { if ($name == 'think') { return redirect('index/think'); } return $next($request); } }
사전/사후 미들웨어
특정 작업이 요청되기 전이나 후에 미들웨어가 실행되는지 여부는 전적으로 미들웨어 자체의 정의에 달려 있습니다.
다음은 사전 동작용 미들웨어입니다
<?php namespace app\http\middleware; class Before { public function handle($request, \Closure $next) { // 添加中间件执行代码 return $next($request); } }
다음은 사후 동작용 미들웨어입니다
<?php namespace app\http\middleware; class After { public function handle($request, \Closure $next) { $response = $next($request); // 添加中间件执行代码 return $response; } }
좀 더 실제적인 예를 들어 현재 브라우저 환경이 위챗인지 알리페이
namespace app\http\middleware; /** * 访问环境检查,是否是微信或支付宝等 */ class InAppCheck { public function handle($request, \Closure $next) { if (preg_match('~micromessenger~i', $request->header('user-agent'))) { $request->InApp = 'WeChat'; } else if (preg_match('~alipay~i', $request->header('user-agent'))) { $request->InApp = 'Alipay'; } return $next($request); } }
인지 확인해야 합니다. 그런 다음 middleware.php 파일을 모바일 모듈에 추가하세요
예: /path/application/mobile/middleware.php
return [ app\http\middleware\InAppCheck::class, ];
그런 다음 컨트롤러에서 $this->request->InApp을 통해 관련 정보를 얻을 수 있습니다.
Register middleware
routing middleware
의 값 가장 일반적으로 사용되는 미들웨어 등록 방법은 라우팅 미들웨어를 등록
Route::rule('hello/:name','hello') ->middleware('Auth');
하거나 전체 미들웨어 클래스 이름
Route::rule('hello/:name','hello') ->middleware(app\http\middleware\Auth::class);
을 사용하여 여러 미들웨어 등록을 지원합니다
Route::rule('hello/:name','hello') ->middleware(['Auth', 'Check']);
V5 .1.7+ 버전에서는 애플리케이션 구성 디렉터리의 middleware.php에서 미들웨어를 직접 사전 정의할 수 있습니다(실제로 별칭 식별자 추가). 예:
return [ 'auth'=>app\http\middleware\Auth::class, 'check'=>app\http\middleware\Check::class ];
그런 다음 라우팅에서 직접 미들웨어 별칭 등록을 사용합니다.
Route::rule('hello/:name','hello') ->middleware(['Auth', 'Check']);
시작 V5.1.8+부터는 별칭을 사용하여 미들웨어 그룹을 정의할 수 있습니다. 예:
return [ 'check'=>[ app\http\middleware\Auth::class, app\http\middleware\Check::class ], ];
그런 다음 다음 방법을 직접 사용하여 미들웨어를 등록합니다.
Route::rule('hello/:name','hello') ->middleware('check');
라우팅 그룹에 대한 미들웨어 등록을 지원합니다.
Route::group('hello', function(){ Route::rule('hello/:name','hello'); })->middleware('Auth');
V5. + 특정 도메인 이름에 대한 등록 미들웨어 지원 시작
Route::domain('admin', function(){ // 注册域名下的路由规则 })->middleware('Auth');
미들웨어에 추가 매개변수를 전달해야 하는 경우
Route::rule('hello/:name','hello') ->middleware('Auth:admin');
를 사용하면 됩니다. 상수 정의를 사용하는 경우 두 번째 매개변수에 미들웨어 매개변수를 전달하면 됩니다.
Route::rule('hello/:name','hello') ->middleware(Auth::class, 'admin');
여러 미들웨어를 정의해야 하는 경우 배열 방법
Route::rule('hello/:name','hello') ->middleware([Auth::class, 'Check']);
을 사용하여 동일한 추가 매개변수
Route::rule('hello/:name','hello') ->middleware([Auth::class, 'Check'], 'admin');
를 전달하거나 미들웨어 매개변수를 개별적으로 지정하세요.
Route::rule('hello/:name','hello') ->middleware(['Auth:admin', 'Check:editor']);
클로저를 사용하여 미들웨어 정의
미들웨어 클래스를 사용할 필요는 없습니다. 일부 간단한 상황에서는 클로저를 사용하여 미들웨어를 정의할 수 있지만 클로저 함수는 응답 개체 인스턴스를 반환해야 합니다.
Route::group('hello', function(){ Route::rule('hello/:name','hello'); })->middleware(function($request,\Closure $next){ if ($request->param('name') == 'think') { return redirect('index/think'); } return $next($request); });
글로벌 미들웨어
다음 방법을 사용하여 응용 프로그램 디렉터리 아래에 middleware.php 파일을 정의할 수 있습니다.
<?php return [ \app\http\middleware\Auth::class, 'Check', 'Hello', ];
미들웨어 등록에는 전체 클래스 이름을 사용해야 합니다. 네임스페이스가 지정되지 않은 경우 apphttpmiddleware를 다음과 같이 사용하세요. 네임스페이스.
글로벌 미들웨어의 실행 순서는 정의 순서입니다. 글로벌 미들웨어 정의 시 미들웨어 매개변수를 전달할 수 있으며, 두 가지 방식을 지원합니다.
<?php return [ [\app\http\middleware\Auth::class, 'admin'], 'Check', 'Hello:thinkphp', ];
위 정의는 admin 매개변수가 Auth 미들웨어에 전달되고 thinkphp 매개변수가 Hello 미들웨어에 전달된다는 의미입니다.
모듈 미들웨어
V5.1.8+부터 모듈 미들웨어 정의가 지원됩니다. middleware.php 파일을 모듈 디렉터리에 직접 추가할 수 있습니다. 정의 방법은 애플리케이션 미들웨어 정의와 동일합니다. 이 모듈에서만 사용됩니다.
컨트롤러 미들웨어
V5.1.17+부터 컨트롤러용 미들웨어 정의를 지원합니다. 먼저 컨트롤러는 시스템의 thinkController 클래스를 상속한 다음 컨트롤러에 미들웨어 속성을 정의해야 합니다. 예:
<?php namespace app\index\controller; use think\Controller; class Index extends Controller { protected $middleware = ['Auth']; public function index() { return 'index'; } public function hello() { return 'hello'; } }
인덱스 컨트롤러가 실행되면 인증 미들웨어가 호출되며 전체 네임스페이스 사용도 지원됩니다. 정의.
컨트롤러 중간에 효과적인 동작을 설정해야 한다면 다음과 같이 정의하면 됩니다.
<?php namespace app\index\controller; use think\Controller; class Index extends Controller { protected $middleware = [ 'Auth' => ['except' => ['hello'] ], 'Hello' => ['only' => ['hello'] ], ]; public function index() { return 'index'; } public function hello() { return 'hello'; } }
미들웨어는 컨트롤러에 매개변수를 전달합니다.
컨트롤러(또는 다른 장소)에 매개변수를 전달할 수 있습니다. 요청 개체에 값을 할당합니다(예:
<?php namespace app\http\middleware; class Hello { public function handle($request, \Closure $next) { $request->hello = 'ThinkPHP'; return $next($request); } }
) 전달된 변수 이름이 param 변수와 충돌해서는 안 됩니다.
그러면 컨트롤러 메서드에서 직접 사용할 수 있습니다
public function index(Request $request) { return $request->hello; // ThinkPHP }
이 기사는 ThinkPHP 프레임워크 기술 기사 칼럼에서 가져온 것입니다:http://www.php.cn/phpkj/thinkphp/
위 내용은 thinkphp 미들웨어는 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 ThinkPhp의 내장 테스트 프레임 워크에 대해 논의하여 장치 및 통합 테스트와 같은 주요 기능과 조기 버그 감지 및 개선 된 코드 품질을 통해 응용 프로그램 신뢰성을 향상시키는 방법을 강조합니다.

기사는 실시간 주식 시장 데이터 피드에 ThinkPHP를 사용하여 설정, 데이터 정확도, 최적화 및 보안 측정에 중점을 둡니다.

이 기사는 서버리스 아키텍처에서 ThinkPHP를 사용하기위한 주요 고려 사항에 대해 설명하고 성능 최적화, 무국적 설계 및 보안에 중점을 둡니다. 비용 효율성 및 확장 성과 같은 혜택을 강조하고 도전 과제를 해결합니다.

이 기사에서는 ThinkPHP 마이크로 서비스에서 서비스 검색 및로드 밸런싱 구현, 설정, 모범 사례, 통합 방법 및 권장 도구에 중점을 둡니다. [159 문자]

ThinkPhp의 IOC 컨테이너는 PHP apps.character 수 : 159의 효율적인 종속성 관리를위한 게으른 하중, 맥락 바인딩 및 메소드 주입과 같은 고급 기능을 제공합니다.

이 기사는 ThinkPhp를 사용하여 실시간 협업 도구를 구축하고 설정, WebSocket 통합 및 보안 모범 사례에 중점을 둡니다.

ThinkPhp는 가벼운 디자인, MVC 아키텍처 및 확장 성을 통해 SaaS 앱에 혜택을줍니다. 다양한 기능을 통해 확장 성을 향상시키고 개발 속도를 높이며 보안을 향상시킵니다.

이 기사는 설치, 구성, 작업 관리 및 확장성에 중점을 둔 ThinkPhp 및 RabbitMQ를 사용하여 분산 작업 큐 시스템을 구축합니다. 주요 문제는 고 가용성 보장, 손상과 같은 일반적인 함정을 피하는 것입니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版
시각적 웹 개발 도구
