ä¸é´ä»¶ä¸»è¦ç¨äºæ¦æªæè¿æ»¤åºç¨ç`HTTP`请æ±ï¼å¹¶è¿è¡å¿
è¦çä¸å¡å¤çã
>[danger] æ°çé¨åæ ¸å¿åè½ä½¿ç¨ä¸é´ä»¶å¤çï¼ä½ å¯ä»¥çµæ´»å
³éãå
æ¬Sessionåè½ã请æ±ç¼ååå¤è¯è¨åè½ã
## å®ä¹ä¸é´ä»¶
å¯ä»¥éè¿å½ä»¤è¡æ令快éçæä¸é´ä»¶
~~~
php think make:middleware Check
~~~
è¿ä¸ªæä»¤ä¼ `app/middleware`ç®å½ä¸é¢çæä¸ä¸ª`Check`ä¸é´ä»¶ã
~~~
<?php
namespace app\middleware;
class Check
{
public function handle($request, \Closure $next)
{
if ($request->param('name') == 'think') {
return redirect('index/think');
}
return $next($request);
}
}
~~~
ä¸é´ä»¶çå
¥å£æ§è¡æ¹æ³å¿
é¡»æ¯`handle`æ¹æ³ï¼èä¸ç¬¬ä¸ä¸ªåæ°æ¯`Request`对象ï¼ç¬¬äºä¸ªåæ°æ¯ä¸ä¸ªéå
ã
>[danger] ä¸é´ä»¶`handle`æ¹æ³çè¿åå¼å¿
é¡»æ¯ä¸ä¸ª`Response`对象ã
å¨è¿ä¸ªä¸é´ä»¶ä¸æ们å¤æå½å请æ±ç`name`åæ°çäº`think`çæ¶åè¿è¡éå®åå¤çãå¦åï¼è¯·æ±å°è¿ä¸æ¥ä¼ éå°åºç¨ä¸ãè¦è®©è¯·æ±ç»§ç»ä¼ éå°åºç¨ç¨åºä¸ï¼åªéä½¿ç¨ `$request` ä½ä¸ºåæ°å»è°ç¨åè°å½æ° `$next` ã
>[info] å¨æäºéæ±ä¸ï¼å¯ä»¥ä½¿ç¨ç¬¬ä¸ä¸ªåæ°ä¼ å
¥é¢å¤çåæ°ã
~~~
<?php
namespace app\middleware;
class Check
{
public function handle($request, \Closure $next, $name)
{
if ($name == 'think') {
return redirect('index/think');
}
return $next($request);
}
}
~~~
## ç»æè°åº¦
ä¸é´ä»¶æ¯æå®ä¹è¯·æ±ç»æåçåè°æºå¶ï¼ä½ åªéè¦å¨ä¸é´ä»¶ç±»ä¸æ·»å `end`æ¹æ³ã
```
public function end(\think\Response $response)
{
// åè°è¡ä¸º
}
```
>[danger] 注æï¼å¨`end`æ¹æ³éé¢ä¸è½æä»»ä½çååºè¾åºãå 为åè°è§¦åçæ¶å请æ±ååºè¾åºå·²ç»å®æäºã
## åç½®/åç½®ä¸é´ä»¶
ä¸é´ä»¶æ¯å¨è¯·æ±å
·ä½çæä½ä¹åè¿æ¯ä¹åæ§è¡ï¼å®å
¨åå³äºä¸é´ä»¶çå®ä¹æ¬èº«ã
ä¸é¢æ¯ä¸ä¸ªåç½®è¡ä¸ºçä¸é´ä»¶
~~~
<?php
namespace app\middleware;
class Before
{
public function handle($request, \Closure $next)
{
// æ·»å ä¸é´ä»¶æ§è¡ä»£ç
return $next($request);
}
}
~~~
ä¸é¢æ¯ä¸ä¸ªåç½®è¡ä¸ºçä¸é´ä»¶
~~~
<?php
namespace app\middleware;
class After
{
public function handle($request, \Closure $next)
{
$response = $next($request);
// æ·»å ä¸é´ä»¶æ§è¡ä»£ç
return $response;
}
}
~~~
ä¸é´ä»¶æ¹æ³åæ ·ä¹å¯ä»¥æ¯æä¾èµæ³¨å
¥ã
æ¥ä¸ªæ¯è¾å®é
çä¾åï¼æ们éè¦å¤æå½åæµè§å¨ç¯å¢æ¯å¨å¾®ä¿¡ææ¯ä»å®
~~~
namespace app\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/app/mobile/middleware.php`
~~~
return [
app\middleware\InAppCheck::class,
];
~~~
ç¶åå¨ä½ ç`controller`ä¸å¯ä»¥éè¿`request()->InApp`è·åç¸å
³çå¼
## å®ä¹ä¸é´ä»¶å«å
å¯ä»¥ç´æ¥å¨åºç¨é
ç½®ç®å½ä¸ç`middleware.php`ä¸å
é¢å®ä¹ä¸é´ä»¶ï¼å
¶å®å°±æ¯å¢å å«åæ è¯ï¼ï¼ä¾å¦ï¼
~~~
return [
'alias' => [
'auth' => app\middleware\Auth::class,
'check' => app\middleware\Check::class,
],
];
~~~
å¯ä»¥æ¯æ使ç¨å«åå®ä¹ä¸ç»ä¸é´ä»¶ï¼ä¾å¦ï¼
~~~
return [
'alias' => [
'check' => [
app\middleware\Auth::class,
app\middleware\Check::class,
],
],
];
~~~
## 注åä¸é´ä»¶
æ°ççä¸é´ä»¶å为å
¨å±ä¸é´ä»¶ãåºç¨ä¸é´ä»¶ï¼å¤åºç¨æ¨¡å¼ä¸ææï¼ãè·¯ç±ä¸é´ä»¶ä»¥åæ§å¶å¨ä¸é´ä»¶å个ç»ãæ§è¡é¡ºåºåå«ä¸ºï¼
> å
¨å±ä¸é´ä»¶->åºç¨ä¸é´ä»¶->è·¯ç±ä¸é´ä»¶->æ§å¶å¨ä¸é´ä»¶
### å
¨å±ä¸é´ä»¶
å
¨å±ä¸é´ä»¶å¨`app`ç®å½ä¸é¢`middleware.php`æ件ä¸å®ä¹ï¼ä½¿ç¨ä¸é¢çæ¹å¼ï¼
~~~
<?php
return [
\app\middleware\Auth::class,
'check',
'Hello',
];
~~~
ä¸é´ä»¶ç注ååºè¯¥ä½¿ç¨å®æ´çç±»åï¼å¦æå·²ç»å®ä¹äºä¸é´ä»¶å«åï¼æè
åç»ï¼åå¯ä»¥ç´æ¥ä½¿ç¨ã
å
¨å±ä¸é´ä»¶çæ§è¡é¡ºåºå°±æ¯å®ä¹é¡ºåºãå¯ä»¥å¨å®ä¹å
¨å±ä¸é´ä»¶çæ¶åä¼ å
¥ä¸é´ä»¶åæ°ï¼æ¯æ两ç§æ¹å¼ä¼ å
¥ã
~~~
<?php
return [
[\app\http\middleware\Auth::class, 'admin'],
'Check',
['hello','thinkphp'],
];
~~~
ä¸é¢çå®ä¹è¡¨ç¤º ç»`Auth`ä¸é´ä»¶ä¼ å
¥`admin`åæ°ï¼ç»`Hello`ä¸é´ä»¶ä¼ å
¥`thinkphp`åæ°ã
### åºç¨ä¸é´ä»¶
å¦æä½ ä½¿ç¨äºå¤åºç¨æ¨¡å¼ï¼åæ¯æåºç¨ä¸é´ä»¶å®ä¹ï¼ä½ å¯ä»¥ç´æ¥å¨åºç¨ç®å½ä¸é¢å¢å `middleware.php`æ件ï¼å®ä¹æ¹å¼åå
¨å±ä¸é´ä»¶å®ä¹ä¸æ ·ï¼åªæ¯åªä¼å¨è¯¥åºç¨ä¸é¢çæã
### è·¯ç±ä¸é´ä»¶
æ常ç¨çä¸é´ä»¶æ³¨åæ¹å¼æ¯æ³¨åè·¯ç±ä¸é´ä»¶
~~~
Route::rule('hello/:name','hello')
->middleware(\app\middleware\Auth::class);
~~~
æ¯æ注åå¤ä¸ªä¸é´ä»¶
~~~
Route::rule('hello/:name','hello')
->middleware([\app\middleware\Auth::class, \app\middleware\Check::class]);
~~~
ç¶åï¼ç´æ¥ä½¿ç¨ä¸é¢çæ¹å¼æ³¨åä¸é´ä»¶
~~~
Route::rule('hello/:name','hello')
->middleware('check');
~~~
æ¯æ对路ç±åç»æ³¨åä¸é´ä»¶
~~~
Route::group('hello', function(){
Route::rule('hello/:name','hello');
})->middleware('auth');
~~~
æ¯æ对æ个åå注åä¸é´ä»¶
~~~
Route::domain('admin', function(){
// 注åååä¸çè·¯ç±è§å
})->middleware('auth');
~~~
å¦æéè¦ä¼ å
¥é¢å¤åæ°ç»ä¸é´ä»¶ï¼å¯ä»¥ä½¿ç¨
~~~
Route::rule('hello/:name','hello')
->middleware('auth', 'admin');
~~~
å¦æéè¦å®ä¹å¤ä¸ªä¸é´ä»¶ï¼ä½¿ç¨æ°ç»æ¹å¼
~~~
Route::rule('hello/:name','hello')
->middleware([Auth::class, 'Check']);
~~~
å¯ä»¥ç»ä¸ä¼ å
¥åä¸ä¸ªé¢å¤åæ°
~~~
Route::rule('hello/:name','hello')
->middleware(['auth', 'check'], 'admin');
~~~
æè
åå¼å¤æ¬¡è°ç¨ï¼æå®ä¸åçåæ°
~~~
Route::rule('hello/:name','hello')
->middleware('auth', 'admin')
->middleware('hello', 'thinkphp');
~~~
å¦æä½ å¸ææ个路ç±ä¸é´ä»¶æ¯å
¨å±æ§è¡ï¼ä¸ç®¡è·¯ç±æ¯å¦å¹é
ï¼ï¼å¯ä»¥ä¸éè¦å¨è·¯ç±éé¢å®ä¹ï¼æ¯æç´æ¥å¨è·¯ç±é
ç½®æ件ä¸å®ä¹ï¼ä¾å¦å¨`config/route.php`é
ç½®æ件ä¸æ·»å ï¼
```
'middleware' => [
app\middleware\Auth::class,
app\middleware\Check::class,
],
```
è¿æ ·ï¼ææ该åºç¨ä¸ç请æ±é½ä¼æ§è¡`Auth`å`Check`ä¸é´ä»¶ã
### 使ç¨éå
å®ä¹ä¸é´ä»¶
ä½ ä¸ä¸å®è¦ä½¿ç¨ä¸é´ä»¶ç±»ï¼å¨æäºç®åçåºåä½ å¯ä»¥ä½¿ç¨éå
å®ä¹ä¸é´ä»¶ï¼ä½éå
å½æ°å¿
é¡»è¿å`Response`对象å®ä¾ã
~~~
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
namespace app\controller;
class Index
{
protected $middleware = ['auth'];
public function index()
{
return 'index';
}
public function hello()
{
return 'hello';
}
}
~~~
å½æ§è¡`index`æ§å¶å¨çæ¶åå°±ä¼è°ç¨`auth`ä¸é´ä»¶ï¼ä¸æ ·æ¯æ使ç¨å®æ´çå½å空é´å®ä¹ã
å¦æéè¦è®¾ç½®æ§å¶å¨ä¸é´ççææä½ï¼å¯ä»¥å¦ä¸å®ä¹ï¼
~~~
<?php
namespace app\controller;
class Index
{
protected $middleware = [
'auth' => ['except' => ['hello'] ],
'check' => ['only' => ['hello'] ],
];
public function index()
{
return 'index';
}
public function hello()
{
return 'hello';
}
}
~~~
## ä¸é´ä»¶åæ§å¶å¨ä¼ å
å¯ä»¥éè¿ç»è¯·æ±å¯¹è±¡èµå¼çæ¹å¼ä¼ åç»æ§å¶å¨ï¼æè
å
¶å®å°æ¹ï¼ï¼ä¾å¦
~~~
<?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
}
~~~
## æ§è¡ä¼å
级
å¦æ对ä¸é´ä»¶çæ§è¡é¡ºåºæä¸¥æ ¼çè¦æ±ï¼å¯ä»¥å®ä¹ä¸é´ä»¶çæ§è¡ä¼å
级ãå¨é
ç½®æ件ä¸æ·»å
```
return [
'alias' => [
'check' => [
app\middleware\Auth::class,
app\middleware\Check::class,
],
],
'priority' => [
think\middleware\SessionInit::class,
app\middleware\Auth::class,
app\middleware\Check::class,
],
];
```
## å
ç½®ä¸é´ä»¶
æ°çå
ç½®äºå 个系ç»ä¸é´ä»¶ï¼å
æ¬ï¼
ä¸é´ä»¶ç±»|æè¿°
----|----
think\middleware\AllowCrossDomain|è·¨å请æ±æ¯æ
think\middleware\CheckRequestCache|请æ±ç¼å
think\middleware\LoadLangPack|å¤è¯è¨å è½½
think\middleware\SessionInit|Sessionåå§å
think\middleware\FormTokenCheck|表å令ç
è¿äºå
ç½®ä¸é´ä»¶é»è®¤é½æ²¡æå®ä¹ï¼ä½ å¯ä»¥å¨åºç¨ç`middleware.php`æ件ä¸ãè·¯ç±æè
æ§å¶å¨ä¸å®ä¹è¿äºä¸é´ä»¶ï¼å¦æä¸éè¦ä½¿ç¨çè¯ï¼åæ¶å®ä¹å³å¯ã
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- URL访é®
- 容å¨åä¾èµæ³¨å ¥
- æå¡
- é¨é¢
- ä¸é´ä»¶
- äºä»¶
- è·¯ç±
- è·¯ç±å®ä¹
- åéè§å
- è·¯ç±å°å
- è·¯ç±åæ°
- è·¯ç±ä¸é´ä»¶
- è·¯ç±åç»
- èµæºè·¯ç±
- 注解路ç±
- è·¯ç±ç»å®
- ååè·¯ç±
- MISSè·¯ç±
- è·¨å请æ±
- URLçæ
- æ§å¶å¨
- æ§å¶å¨å®ä¹
- åºç¡æ§å¶å¨
- 空æ§å¶å¨
- èµæºæ§å¶å¨
- æ§å¶å¨ä¸é´ä»¶
- 请æ±
- 请æ±å¯¹è±¡
- 请æ±ä¿¡æ¯
- è¾å ¥åé
- 请æ±ç±»å
- HTTP头信æ¯
- 伪éæ
- åæ°ç»å®
- 请æ±ç¼å
- ååº
- ååºè¾åº
- ååºåæ°
- éå®å
- æ件ä¸è½½
- æ°æ®åº
- è¿æ¥æ°æ®åº
- åå¸å¼æ°æ®åº
- æ¥è¯¢æé å¨
- æ¥è¯¢æ°æ®
- æ·»å æ°æ®
- æ´æ°æ°æ®
- å é¤æ°æ®
- æ¥è¯¢è¡¨è¾¾å¼
- é¾å¼æä½
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- èåæ¥è¯¢
- å页æ¥è¯¢
- æ¶é´æ¥è¯¢
- é«çº§æ¥è¯¢
- è§å¾æ¥è¯¢
- JSONå段
- åæ¥è¯¢
- åçæ¥è¯¢
- æ¥è¯¢äºä»¶
- è·åå¨
- äºå¡æä½
- åå¨è¿ç¨
- æ°æ®é
- æ°æ®åºé©±å¨
- 模å
- å®ä¹
- 模åå段
- æ°å¢
- æ´æ°
- å é¤
- æ¥è¯¢
- æ¥è¯¢èå´
- JSONå段
- è·åå¨
- ä¿®æ¹å¨
- æç´¢å¨
- æ°æ®é
- èªå¨æ¶é´æ³
- åªè¯»å段
- 软å é¤
- ç±»å转æ¢
- 模åè¾åº
- 模åäºä»¶
- 模åå ³è
- ä¸å¯¹ä¸å ³è
- ä¸å¯¹å¤å ³è
- è¿ç¨ä¸å¯¹å¤
- è¿ç¨ä¸å¯¹ä¸
- å¤å¯¹å¤å ³è
- å¤æå ³è
- å ³èé¢è½½å ¥
- å ³èç»è®¡
- å ³èè¾åº
- è§å¾
- 模æ¿åé
- è§å¾è¿æ»¤
- 模æ¿æ¸²æ
- 模æ¿å¼æ
- è§å¾é©±å¨
- é误åæ¥å¿
- å¼å¸¸å¤ç
- æ¥å¿å¤ç
- è°è¯
- è°è¯æ¨¡å¼
- Traceè°è¯
- SQLè°è¯
- åéè°è¯
- è¿ç¨è°è¯
- éªè¯
- éªè¯å¨
- éªè¯è§å
- é误信æ¯
- éªè¯åºæ¯
- è·¯ç±éªè¯
- å ç½®è§å
- 表å令ç
- 注解éªè¯
- æ项
- ç¼å
- Session
- Cookie
- å¤è¯è¨
- ä¸ä¼
- å½ä»¤è¡
- å¯å¨å ç½®æå¡å¨
- æ¥ççæ¬
- èªå¨çæåºç¨ç®å½
- å建类åºæ件
- æ¸ é¤ç¼åæ件
- çææ°æ®è¡¨å段ç¼å
- çæè·¯ç±æ å°ç¼å
- è¾åºè·¯ç±å®ä¹
- èªå®ä¹æ令
- æ©å±åº
- æ°æ®åºè¿ç§»å·¥å ·
- Workerman
- thinkå©æå·¥å ·åº
- éªè¯ç
- Swoole
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿