# 官方文檔:
http://www.hmoore.net/manual/thinkphp5_1/564279
# 輸入命令生成中間件
~~~
php think make:middleware Check
~~~


# 注冊中間件:
# 在application里新鍵一個`middleware.php`文件
## 代碼:
~~~
<?php
return[
app\http\middleware\Check::class //注冊中間件 到應用目錄
];
~~~
## 一般用于登陸的時候,如果哪個路由需要就單獨設置哪個路由


## 中間件里返回對象包(一個完整的中間件框架就是以下圖片所展示代碼)

~~~
<?php
namespace app\http\middleware;
class Check
{
public function handle($request, \Closure $next) //入口 這里一般不要改變觸發改源代碼 \Closure 為匿名函數
{
echo '123';
return $next($request); //返回request閉包 固定格式寫到這里
}
}
~~~
# 中間件里的$request可以攔截所有來自路由的參數 進行判斷或者處理

# 代碼案例:
~~~
<?php
namespace app\http\middleware;
use think\Request;
class Check
{
public function handle(Request $request, \Closure $next) //入口 這里一般不要改變觸發改源代碼 \Closure 為匿名函數
{
//這個區域做邏輯判斷,判斷跳轉到哪里或者怎么樣
if($request->param('id')==100){
return redirect('/index');
}elseif($request->param('id')==500){
return redirect('/es');
}
//這個區域做邏輯判斷,判斷跳轉到哪里或者怎么樣
return $next($request); //返回request閉包 固定格式寫到這里
}
}
~~~
# 路由里的參數:

~~~
<?php
Route::get('index/[:id]','index/index/index'); //傳入值
Route::get('es','index/index/es');
~~~
# 注意:
## 中間件的入口執行方法必須是`handle`方法,而且第一個參數是`Request`對象,第二個參數是一個閉包。
# 路由中注冊:
## 注冊中間件
### 路由中間件
## 最常用的中間件注冊方式是注冊路由中間件
~~~
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.1.8+`版本開始支持對某個域名注冊中間件
~~~
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']);
~~~
- 文件作用與框架文件說明
- 助手函數
- 系統常量(常用與自定義)
- 自定義配置文件extra(文件夾)
- 自定義配置文件.Env
- 路由pathinof 方式
- 路由強制模式(主要用這個)
- 路由的請求方法幾種常用
- 路由參數規則設置
- 路由分組閉包與MISS路由
- 資源路由
- 請求Request和參數過濾
- session和cookie的配置及獲取
- 判斷路由請求類型及Request注冊方法
- 響應數據方法create
- json xml jsonp助手函數
- 改命名空間(改成自定義的)
- (controller里常用的方法)success與error重定向的使用nignx重寫的配置
- _initialize構造函數
- beforeAction前置操作使用
- 空路由與多級控制器使用
- 連接數據庫操作(ORM)
- 助手函數db()
- 插入數據庫操作(ORM)
- 查詢數據庫操作(ORM)
- (鏈式語法)where條件查詢數據庫(ORM)
- (鏈式語法)只查詢某個字段或者排除某個字段鏈式操作field(ORM)
- (鏈式語法)排序查詢order(ORM)
- (鏈式語法)查詢條數limit(ORM)
- (鏈式語法)查詢多條重復數據只返回一個distinct方法查詢(ORM)
- (鏈式語法)獲取mysql語句fetchSql(ORM)
- (鏈式語法)查詢改表名輸出alias(ORM)
- 連表查詢join() (ORM)
- 數據庫事務監聽(ORM)
- (改數據)更新數據庫(ORM)
- (改數據)更新數據庫之自增與自減(ORM)
- 鏈式操作語法(ORM)
- (刪除數據)刪除數據(ORM)
- model模型創建方法
- (增)插入數據(Model)
- (查)查詢數據(Model)
- 關于類 (雜項整理)
- (查)動態查詢數據(Model)
- (改)更新數據庫(Model)
- (刪)刪除數據(Model)
- 數據表時間戳(Model)
- view視圖創建與渲染模板
- view視圖輸出與調用
- view輸出常量與Session 與Cookie值
- view輸出函數以及過濾
- view視圖循環輸出與if判斷
- view各項配置以及修改(自定義資源路徑)
- view各項配置以及修改(修改模板起始符)
- view 模板引入和自定義配置
- view模板繼承
- thinkphp 實戰命令行生成模塊控制器模型視圖
- Validate登錄驗證使用方法
- Validate驗證場景分離寫法
- Validate令牌驗證
- captcha驗證碼配置
- 圖片以及文件上傳
- 資源路由下URL語法拼接模板循環的ID
- view三元運算符
- POST下的PUT請求(安全方法)
- 路由重定向
- 常見問題解決
- config文件
- 模板里使用路由路徑
- 原生PHP在thinkphp中拓展
- 公共函數文件
- 5.1與5.0區別
- 5.1路由區別
- 5.1中間件
- 5.1微信支付