検索
ホームページPHPフレームワークThinkPHPThinkPHP6.0のミドルウェアを1つの記事で学ぶ

ThinkPHP6.0のミドルウェアを1つの記事で学ぶ

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 &#39;Before Middleware<br/>&#39;;
    $response = $next($request);
    echo &#39;After Middleware<br/>&#39;;
    return $response;
    }
}

ミドルウェア ハンドル メソッドの戻り値は、Response オブジェクトである必要があります。

次に、グローバル ミドルウェア定義に

return [
\app\middleware\Test::class,
];

を追加します。アクセスしたいコントローラー メソッドが

<?php
namespace app\controller;
class Index
{
    public function hello()
    {
    return &#39;Hello,ThinkPHP!<br/>&#39;;
    }
}

であるとします。操作メソッドへのアクセスの出力は

Before Middleware
Hello,ThinkPHP!
After Middleware
# です。 # #ミドルウェアの実行プロセスがわかります。実行プロセスからプレミドルウェアとポストミドルウェアに分けることができます。もちろん、ミドルウェアにはプレミドルウェアとポストミドルウェアの両方の動作がある場合があります。これは、上記のテストミドルウェアです。 $next($request) より前のコードはプレミドルウェア カテゴリに属し、その後のコードはポストミドルウェア カテゴリに属します。

アプリケーション ミドルウェア

マルチアプリケーション モードの場合、アプリケーション ミドルウェアは app\アプリケーション名\middleware.php に定義されているミドルウェアであり、これのみが使用されます。 in 本アプリケーション上で有効であり、定義形式はグローバルミドルウェアと一致します。

ルーティング ミドルウェア

ルーティング ミドルウェアとは、ルートが一致した場合にのみ特定のミドルウェアが実行されることを意味します。これは、ルート定義のミドルウェア メソッドを使用して定義されます。例:

Route::get(&#39;hello/:name&#39;,&#39;index/hello&#39;)
    ->middleware(\app\middleware\Hello::class);

ルーティング グループ用のミドルウェアを定義できます

Route::group(function(){
Route::get(&#39;hello/:name&#39;,&#39;index/hello&#39;);
//...
})->middleware(\app\middleware\Hello::class);

複数のミドルウェアを実行したい場合は、

Route::group(function(){
Route::get(&#39;hello/:name&#39;,&#39;index/hello&#39;);
//...
})->middleware([\app\middleware\Hello::class,\app\middleware\Check::class]);

を使用できます頻繁に使用されるミドルウェアについては、1 つのミドルウェアを定義できますconfig\middleware.php 構成ファイルでエイリアスを設定します。

return [
&#39;hello&#39;=>\app\middleware\Hello::class,
&#39;check&#39;=>\app\middleware\Check::class,
];

ルート定義は次のように変更できます:

Route::group(function(){
Route::get(&#39;hello/:name&#39;,&#39;index/hello&#39;);
//...
})->middleware([&#39;hello&#39;,&#39;check&#39;]);

サポート ミドルウェアのグループのエイリアスの定義

return [
&#39;test&#39;=>[\app\middleware\Hello::class,\app\middleware\Check::class],
];

ルート定義

Route::group(function(){
Route::get(&#39;hello/:name&#39;,&#39;index/hello&#39;);
//...
})->middleware(&#39;test&#39;);

に変更できます。ミドルウェアはパラメータの受け渡しをサポートしています。ミドルウェアは次のように定義されています:

<?php
namespace app\middleware;
class Hello
{
    public function handle($request, \Closure $next, string $name = &#39;&#39;)
    {
    echo &#39;Hello&#39;. $name . &#39;<br/>&#39;;
    return $next($request);
    }
}

nameパラメータはルーティングの2番目のパラメータとして渡すことができますmiddleware

Route::get(&#39;hello/:name&#39;,&#39;index/hello&#39;)
    ->middleware(&#39;hello&#39;, &#39;middleware&#39;);

パラメータのサポートに加えて、ミドルウェアのハンドル メソッドで依存関係の挿入を使用できます。

コントローラミドルウェア

コントローラミドルウェアは、特定のコントローラにアクセスした場合にのみ有効になります

<?php
namespace app\controller;
class Hello
{
protected $middleware = [&#39;hello&#39;,&#39;check&#39;];
    public function index()
    {
    return &#39;Hello,ThinkPHP!<br/>&#39;;
    }
}

ミドルウェアは事前にエイリアスが定義されているため、エイリアスを使用しますここで直接定義を使用するか、完全な名前空間定義を使用する必要があります。

デフォルトでは、コントローラーに定義されたミドルウェアがコントローラーにアクセスするすべての操作メソッドが実行されます。すべての操作でミドルウェアを実行する必要がない場合があります。コントローラーのミドルウェアを定義する方法は 2 つあります。 . ファイルの実行フィルタリング。

<?php
namespace app\controller;
class Index
{
protected $middleware = [
&#39;hello&#39; => [&#39;only&#39;  => [&#39;hello&#39;]],
&#39;check&#39; => [&#39;except&#39;=> [&#39;hello&#39;]],
];
    public function hello()
    {
    return &#39;Hello,ThinkPHP!<br/>&#39;;
    }
    public function check()
    {
    return &#39;this action require check!<br/>&#39;;
    }    
}

helloミドルウェアはIndexコントローラのhelloオペレーション実行時のみ実行され、チェックミドルウェアはhelloメソッド以外で実行され、具体的な効果を実際にテストすることができます。

ミドルウェアによるパラメータの受け渡し

ミドルウェアとコントローラ間でパラメータを渡す方法は多数ありますが、簡単な方法は、Request を使用してパラメータを渡すことです。

<?php
namespace app\middleware;
class Hello
{
    public function handle($request, \Closure $next)
    {
        $request->hello = &#39;ThinkPHP&#39;;
        
        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 サイトの他の関連記事を参照してください。

声明
この記事はThinkPHP官网で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
ThinkPHPの組み込みテストフレームワークの主な機能は何ですか?ThinkPHPの組み込みテストフレームワークの主な機能は何ですか?Mar 18, 2025 pm 05:01 PM

この記事では、ThinkPHPの組み込みテストフレームワークについて説明し、ユニットや統合テストなどの主要な機能と、早期のバグ検出とコード品質の向上を通じてアプリケーションの信頼性を高める方法について強調しています。

リアルタイムの株式市場データフィードを構築するためにThinkPhpを使用する方法は?リアルタイムの株式市場データフィードを構築するためにThinkPhpを使用する方法は?Mar 18, 2025 pm 04:57 PM

記事では、リアルタイムの株式市場データフィードにThinkPhpを使用して、セットアップ、データの正確性、最適化、セキュリティ対策に焦点を当てて説明します。

サーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項は何ですか?サーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項は何ですか?Mar 18, 2025 pm 04:54 PM

この記事では、パフォーマンスの最適化、ステートレス設計、セキュリティに焦点を当てたサーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項について説明します。コスト効率やスケーラビリティなどの利点を強調しますが、課題にも対処します

ThinkPhpマイクロサービスでサービスの発見と負荷分散を実装する方法は?ThinkPhpマイクロサービスでサービスの発見と負荷分散を実装する方法は?Mar 18, 2025 pm 04:51 PM

この記事では、セットアップ、ベストプラクティス、統合方法、および推奨ツールに焦点を当てたThinkPhpマイクロサービスにサービスの発見と負荷分散の実装について説明します。[159文字]。

ThinkPhpの依存関係噴射コンテナの高度な機能は何ですか?ThinkPhpの依存関係噴射コンテナの高度な機能は何ですか?Mar 18, 2025 pm 04:50 PM

ThinkPHPのIOCコンテナは、PHPアプリで効率的な依存関係管理のための怠zyなロード、コンテキストバインディング、メソッドインジェクションなどの高度な機能を提供します。

リアルタイムのコラボレーションツールを構築するためにThinkPhpを使用する方法は?リアルタイムのコラボレーションツールを構築するためにThinkPhpを使用する方法は?Mar 18, 2025 pm 04:49 PM

この記事では、ThinkPhpを使用してリアルタイムのコラボレーションツールを構築し、セットアップ、Websocket統合、セキュリティベストプラクティスに焦点を当てて説明します。

SaaSアプリケーションを構築するためにThinkPhpを使用することの主な利点は何ですか?SaaSアプリケーションを構築するためにThinkPhpを使用することの主な利点は何ですか?Mar 18, 2025 pm 04:46 PM

ThinkPhpは、軽量のデザイン、MVCアーキテクチャ、および拡張性を備えたSaaSアプリに利益をもたらします。スケーラビリティを向上させ、開発を速め、さまざまな機能を通じてセキュリティを改善します。

ThinkPhpとRabbitmqを使用して分散タスクキューシステムを構築する方法は?ThinkPhpとRabbitmqを使用して分散タスクキューシステムを構築する方法は?Mar 18, 2025 pm 04:45 PM

この記事では、ThinkPhpとRabbitMQを使用して分散タスクキューシステムの構築を概説し、インストール、構成、タスク管理、およびスケーラビリティに焦点を当てています。重要な問題には、Immedのような一般的な落とし穴を避けるための高可用性の確保が含まれます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール