ThinkPHP6.0 ミドルウェアはシステムミドルウェアとアプリケーションミドルウェアに分かれており、システムミドルウェアはコアフレームワークに組み込まれるミドルウェア、アプリケーションミドルウェアはアプリケーション内に作成されるミドルウェアです。
ミドルウェアの主なアプリケーション シナリオには、データ フィルタリング、権限の検出、リクエストのインターセプト、および HTTP リクエストのその他の動作が含まれます。ミドルウェアを使用すると、コントローラの定義が簡素化され、多くの追加の非コア ビジネス プロセスを処理できます。すべて実行のためにミドルウェアに渡すことができます。
ミドルウェアの利用範囲の観点から、グローバルミドルウェア、アプリケーションミドルウェア、コントローラミドルウェア、ルーティングミドルウェアに分類できます。
グローバル ミドルウェア
グローバル ミドルウェアは、app\middleware.php で定義されたミドルウェアです。デフォルトでは有効なミドルウェアはありませんが、サポートされているシステム ミドルウェアについては、ファイルがコメント化されています。対応するシステム ミドルウェアを使用するには、コメントを解除するだけで済みます。デフォルトの内容は次のとおりです:
return [ // 全局请求缓存 // 'think\middleware\CheckRequestCache', // 多语言加载 // 'think\middleware\LoadLangPack', // Session初始化 // 'think\middleware\SessionInit', // 页面Trace调试 // 'think\middleware\TraceDebug', ];
システムの一部の機能は、グローバル リクエスト キャッシュ、多言語自動など、一元管理のためにミドルウェアに引き継がれます。検出と読み込み、セッションの初期化とページ トレースのデバッグ、つまり、デフォルトでインストールされるアプリケーションはセッションをサポートしていません。セッションを有効にする前に、セッション初期化ミドルウェアをグローバルに有効にする必要があります。 API アプリケーションの場合、セッション関数のサポートは必要ありません。
グローバル ミドルウェア定義ファイルにアプリケーション ミドルウェアを追加できますが、システム ミドルウェアが最初に実行されるようにしてください。ミドルウェア定義では完全なクラス名を使用する必要があり、これはコマンド ラインですぐに作成できます。アプリケーション ミドルウェア:
php think make:middleware Test
は、次の内容を含む app\middleware\Test ミドルウェア クラスを自動的に生成します:
<?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
アプリケーション ミドルウェア
マルチアプリケーション モードの場合、アプリケーション ミドルウェアは app\アプリケーション名\middleware.php に定義されているミドルウェアであり、これのみが使用されます。 in 本アプリケーション上で有効であり、定義形式はグローバルミドルウェアと一致します。ルーティング ミドルウェア
ルーティング ミドルウェアとは、ルートが一致した場合にのみ特定のミドルウェアが実行されることを意味します。これは、ルート定義のミドルウェア メソッドを使用して定義されます。例: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/>'; } }
ミドルウェアによるパラメータの受け渡し
ミドルウェアとコントローラ間でパラメータを渡す方法は多数ありますが、簡単な方法は、Request を使用してパラメータを渡すことです。<?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 中国語 Web サイトで入手できます。オンラインで学習することへようこそ!
この記事は、https://www.php.cn/phpkj/thinkphp/から転載されています。
以上がThinkPHP6.0のミドルウェアを1つの記事で学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。